Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.10.2008, 17:28
Аватар для Sharky
Sharky Sharky вне форума
Активный
 
Регистрация: 20.03.2007
Сообщения: 202
Репутация: 10
Вопрос Добавить последовательность байт

Здравствуйте . Подскажите мне вот что ,я всё хочу овладеть этой информацией может кто нибудь знает как мне обьяснить на сщет этой темы . Значит вот что : Есть прога допустим такая тока компилированая
Код:
 procedure TForm1.FormCreate(Sender: TObject);
 var
  a:Integer
 begin
  a:=a+4;
 end;

мне нужно с помощью программы допустим вин хекс или еще какую посоветуете врезать какую либо последовательность байт хотябы заместо 4 вставить 5 или просто что нибуть добавить например Showmessage(IntToStr(a));
Вот как мне работать с последовательностью байтов что мне необходимо знать . Подскажите пожалуйста .
Ответить с цитированием
  #2  
Старый 23.10.2008, 18:30
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Изучай ассемблер
Ответить с цитированием
  #3  
Старый 23.10.2008, 18:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Никто не мешает тебе открыть файл в бинарном виде и поменять там то, что тебе надо. Вся проблема в том, что для этого надо понимать что ты хочешь сделать (собственно изменения) и к чему это может привести, ну и как найти нужное место. Т.е. просто вставить в бинарный код дополнительные команды нельзя, т.к. 2поплывет" вся адресация. Можно только добавить код, а существующий, если позволяет его объем, модифицировать на переход на добавленый код, с последующим возвратом в точку, следующую за переходом (остальное место забивается NOP'ами.

Кстати, скорее всего оптимизатор вырежет приведенную в качестве примера функцию нафиг
Ответить с цитированием
  #4  
Старый 08.11.2008, 19:58
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Посмотри здесь
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #5  
Старый 10.11.2008, 10:42
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Как сказал 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025