![]() |
eXeL@B —› Вопросы новичков —› Вопрос по изменению динамической памяти в программе |
Посл.ответ | Сообщение |
|
Создано: 04 марта 2010 00:42 · Личное сообщение · #1 Вопрос такой: Мне надо изменить заранее известный текст в памяти программы (длина фиксирована). Тип - строка в delphi На первый взгляд ничего сложного: с помощью той же ArtMoney нахожу адрес искомого куска, меняю текст, по четырехбайтовому сдвигу до него пишу новый размер текста. Все работает, но только в том случае, если текст НА который я меняю МЕНЬШЕ изначального. В ином случае новые байты залезают на "территорию" следующей строки, расположенной рядом. Тогда во время работы, программа пишет ошибки о выделении памяти и работает некорректно. Как решить проблему? Вроде как надо увеличить размер отводимый под изначальную строку еще перед запуском, но где и как это реализовать? Есть ли другие пути решения? (например поиск указателей на строку и подмена их на другие) Заранее спасибо! ![]() |
|
Создано: 04 марта 2010 11:32 · Личное сообщение · #2 Есть ли другие пути решения? Есть и единственный - прочесть ПРАВИЛА и раздел Новичку. Любой другой ответ тебе будет непонятен. Например такой : надо пропатчить программу, а для этого нужно хоть немного разобрать логику - это вам не Артмани тупо юзать. Если строки в ресурсах, то в утилитах найдешь редактор ресурсов и поправишь. например поиск указателей на строку и подмена их на другие Умение писать нужные слова не означает их понимание. Указатели Артмани умеет искать, но "вживлять" новые строки нет. На что ты собрался менять указатели? ![]() |
|
Создано: 04 марта 2010 11:33 · Личное сообщение · #3 Fruit пишет: Есть ли другие пути решения? (например поиск указателей на строку и подмена их на другие) Вы сами себе ответили на Ваш вопрос. Решение очевидно: добавляйте новую секцию, пишите туда новые строки, а в ЕХЕ правьте указатели на строку. Если у Вас возникли сложности - выложите программу, или сами что-то в delphi наваляйте (отобразите только суть проблемы). ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 04 марта 2010 13:17 · Личное сообщение · #4 tundra37 пишет: На что ты собрался менять указатели? Ищу в том же процессе не занятый участок памяти, пишу туда нужные мне строки, меняю указатели на новые, с адресами этих строк. Или я чего-то не понимаю? HandMill пишет: Решение очевидно: добавляйте новую секцию, пишите туда новые строки, а в ЕХЕ правьте указатели на строку. Если у Вас возникли сложности - выложите программу, или сами что-то в delphi наваляйте (отобразите только суть проблемы). Вообще я имел ввиду изменение указателей в динамической памяти во время выполнения. А Вы говорите об изменении самого exe, я правильно понял? Но ведь там не должно быть указателей на строку: сама память (и соответственно указатель на нее) будут выделены после запуска программы. Или я неправ? ![]() |
|
Создано: 04 марта 2010 14:46 · Личное сообщение · #5 |
|
Создано: 05 марта 2010 15:55 · Личное сообщение · #6 |
|
Создано: 05 марта 2010 19:04 · Личное сообщение · #7 |
|
Создано: 09 марта 2010 13:47 · Личное сообщение · #8 Вопрос: как еще может программа обращаться к памяти, кроме как через указатели? То что есть указатель на строку не значит, что программа его всегда использует. Она может напрямую туда обратиться - по адресу. Указатели могут быть переинициализированы программой и т.д. и т.п. Может ты и не указатели нашел, а следы на стеке ![]() ![]() |
|
Создано: 12 марта 2010 01:55 · Поправил: Clerk · Личное сообщение · #9 |
|
Создано: 12 марта 2010 09:34 · Личное сообщение · #10 Всем спасибо за ответы. Вопрос решен. Действительно надо было искать указатели в памяти и менять их на новые. В этом случае все работает. В процессе работы выяснил, что к строкам программа может обращаться либо напрямую, либо через указатели и никак иначе. Так что поиск/замена их в памяти является универсальным решением. ![]() |
|
Создано: 12 марта 2010 20:02 · Личное сообщение · #11 |
![]() |
eXeL@B —› Вопросы новичков —› Вопрос по изменению динамической памяти в программе |
Эта тема закрыта. Ответы больше не принимаются. |