![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Здравствуйте . Подскажите мне вот что ,я всё хочу овладеть этой информацией может кто нибудь знает как мне обьяснить на сщет этой темы . Значит вот что : Есть прога допустим такая тока компилированая
Код:
procedure TForm1.FormCreate(Sender: TObject); var a:Integer begin a:=a+4; end; мне нужно с помощью программы допустим вин хекс или еще какую посоветуете врезать какую либо последовательность байт хотябы заместо 4 вставить 5 или просто что нибуть добавить например Showmessage(IntToStr(a)); Вот как мне работать с последовательностью байтов что мне необходимо знать . Подскажите пожалуйста . |
#2
|
|||
|
|||
![]() Изучай ассемблер
|
#3
|
|||
|
|||
![]() Никто не мешает тебе открыть файл в бинарном виде и поменять там то, что тебе надо. Вся проблема в том, что для этого надо понимать что ты хочешь сделать (собственно изменения) и к чему это может привести, ну и как найти нужное место. Т.е. просто вставить в бинарный код дополнительные команды нельзя, т.к. 2поплывет" вся адресация. Можно только добавить код, а существующий, если позволяет его объем, модифицировать на переход на добавленый код, с последующим возвратом в точку, следующую за переходом (остальное место забивается NOP'ами.
Кстати, скорее всего оптимизатор вырежет приведенную в качестве примера функцию нафиг ![]() |
#5
|
||||
|
||||
![]() Как сказал Drozh - учи ассемблер. Поменять значение инкременанта еще можно (хотя могу возникнут сложности - компилятор может скомпилировать a:=a+5 по разному:
Оподы Ассемблер 1. 83C005 add eax,5 2. 0505000000 add eax,5 Причем вероятнее всего, что это будет 1-й вариант. В этом случае выражение a:=a+5 заменить на выражение a:=a+1000 будет уже не просто - длина опкодов не позволит. Насчет добавления кода. Нужно место куда его писать. Потом нужно будет контролировать содержимое стека ибо дельфёвые функции написаны слегка непредсказуемо. Короче много чего нужно учесть. Да и еще нужно будет патчить ЕХЕ, а там надо вычислять смещение на диске относительно смещения в памяти (учим формат РЕ-файлов). Если нужно сделать гибкую программу, то советую использовать скрипты (Например FastScript или из пакета JCL). Реализация намного проще будет. Хорошо написанная программа не требует документации ICQ 9-184-668. |