| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Модификация исполняемого кода в Delphi ? |
| Автор: Robus 30.1.2009, 14:48 | ||
| Привет всем !!! Нужно сделать доступ к памяти, где лежит код программы. Конечный результат это модификация кода в момент его исполнения. Я всегда работал с ТМТ под виндовс и не знал с таким проблем !!! То есть на ходу модифицировал код. В делфи столкнулся с проблемой ... Как только записывю что-то в часть памяти с кодом, - получаю EXCEPTION ... Ну и со всеми вытекающими ... Вот пример кода:
Собственно тут "MOV DWORD PTR DS:[@M1],EAX" мы получаем EXCEPTION ... Настройки компилятора перебрал все, линкера так же перебрал ... Можно легко подлинковать DLL из ТМТ но это не красиво, хочется всё аккуратно !!! Хочу обратить внимание на то, что запись в DS не есть ошибка !!! Хоть сегменты DS и СS имеют разное значение, указывают они на один кусок физической памяти ... Я пробовал ис СS и ЕS - результат тот же !!! Как побороть проблему ??? |
| Автор: Romikgy 30.1.2009, 15:47 |
| если уж Вы занимается самомодификацией тогда дизассемблируйте да посмотрите что делает она (правда даже не знаю что это за ТМТ) |
| Автор: Rrader 30.1.2009, 16:28 | ||||
| Вот тебе примеры: 1) Модификация данных через селектор:смещение:
2) Модификация кода (будем считать, что работаем в пределах одной страницы):
Переписал второй пример, просьба всех потестировать! Должно выводить 200 на Caption. Если закомментировать строчку под { Path }, то 500 |
| Автор: Robus 30.1.2009, 17:12 | ||
Rrader, поробовал твой вариант #2 !!! Получаю EXCEPTION вот в этом месте:
Вообще-то ... Я не совсем понял что оно вообще делает ??? По "JMP M2Addr" мы должны попасть в первый АСМ кусочек ... Но не доходим до этого !!! Я понимаю, что нужно включить разрешение записи в СЕГМЕНТ, просто не знаю как это делать из под винды !!! Но в любом случае "VirtualProtect" не исполняется корректно и вызывает дикие огорчения у DELPHI !!! И ещё ... В OldProtect ничего не записано !!! Это так надо ??? Или "VirtualProtect" туда должен записать ? |
| Автор: Rrader 30.1.2009, 17:20 |
| Robus, сможешь тестовый проект дать, и какая версия Delphi? Выкладываю свой проект, просьба всех протестировать! Указания есть в моем предыдущем посте. |
| Автор: Qu1nt 31.1.2009, 00:28 |
| Delphi 7, Turbo Delphi. Все работает корректно = ) |
| Автор: Robus 25.6.2009, 08:21 |
| Спасибо, я разобался ... Теперь могу строить само-изменяющийся код в момент исполнения ... |
| Автор: CodeMonkey 25.6.2009, 10:45 | ||
|