Win32 в машинных кодах


Исполняемые файлы Windows - часть 7


a 46 ; Здесь должно быть число секций (2 байта) ***** db 03 00 &ltпустая строка&gt

Режим ассемблирования начинается с команды 'a', за которой следует смещение, по которому нужно вводить данные. В нашем случае, PE-заголовок начинается со смещения 40h от начала файла, поэтому к значениям смещения в таблице 1 нужно добавлять 40h. Близко отстоящие друг от друга поля можно набирать "в один заход"; когда же разрыв большой, можно выйти из режима ассемблирования (оставив для этого пустую строку) и вновь набрать 'a' уже с новым смещением. В "разрыве" при этом останутся нули. Учтите, что комментарии можно оставлять лишь "внутри" режима ассемблирования - вне его отладчик выдаст ошибку.

Имеет смысл также выделить те участки, которые нужно будет в дальнейшем редактировать (как этот случай - число секций может каждый раз быть разным); для этого удобно выделять каким-либо способом строку с комментарием, чтобы она сразу бросалась в глаза. Оставшуюся часть файла для debug приведем, как есть; она не должна вызвать проблем (обратите внимание на пустые строки - их нельзя удалять; и помните про обратный порядок байтов в числах, требующих более 1 байта):

a 54 ; Размер дополнительного заголовка db e0 00 ; Тип файла db 0F 01 ; "Магическое" значение db 0B 01

a 68 ; Здесь должно быть смещение точки входа ; относительно адреса загрузки (4 байта) ***** db 00 10 00 00

a 74 ; Начальный адрес загрузки (4 байта) ***** db 00 00 40 00 ; Выравнивание секций (4 байта) db 00 10 00 00 ; Выравнивание в файле (4 байта) db 00 02 00 00 ; Старшая версия Windows (2 байта) db 04 00

a 88 ; Старшая версия подсистемы (2 байта) db 04 00

a 90 ; Здесь должен быть размер загруженного файла ; в памяти (4 байта) ***** db 00 40 00 00 ; Размер всех заголовков в файле (4 байта) db 00 02 00 00

a 9C ; Подсистема: 02 - графическая, 03 - консольная (2 байта) db 02 00

a A0 ; Зарезервированный размер стека (4 байта) db 00 00 10 00 ; Выделенный размер стека (4 байта) db 00 10 00 00 ; Зарезервированный размер кучи (4 байта) db 00 00 10 00 ; Выделенный размер кучи (4 байта) db 00 10 00 00




Начало  Назад  Вперед



Книжный магазин