![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Delphi programs in API.
На английском. Очень подробно всё описано, плюс есть исходные коды готовых юнитов. Например SmallUtil, в котором есть все частоиспользуемые подпрограммы, и который в размере меньше, чем SysUtils (автор так утверждает - я не проверял). |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Мне не так давно было ещё одно откровение, которым спешу поделиться.
Представьте, что у нас есть вот такой код в какой-то программе, которую мы хотим изменить: CODE .00401581: 7513 jne .000401596 Как известно jump'ы правят двумя способами: 1) Когда надо переходить, то меняем 0x7? на 0xEB. 2) Когда НЕ надо переходить, то заменяем оба байта на 0x90. Но я всегда стараюсь сократить количество изменяемых байт, чтобы проще было исправлять, да и самому не путаться. В первом случае, как можно заметить, мы меняем 1 байт, а во втором 2. Хотелось бы сократить издержки производства, но как это сделать? Оказывается достаточно просто - нужно всего лишь заменить второй байт (смещение для прыжка прибавляемое к адресу после команды jump) на 00, вот так: CODE .00401581: 7500 jne .000401583 Куда будет переходить такой прыжок? Правильно, на следующую после jump'а инструкцию. Изменяется всего один байт - очень аккуратно, компактно и элегантно. Спасибо сказали:
|
![]() ![]() |
Упрощённая версия | Сейчас: 21st August 2024 - 09:28 |