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


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


a B4 ; Число элементов каталога смещений (4 байта) db 10 00 00 00 ;************ ; Здесь начинается первый элемент каталога: ; но у нас пока ничего нет - оставляем нули

a 138 ; Начало таблицы секций ; ; имя первой секции (8 символов) db '.code' 0 0 0 ; размер секции в памяти (4 байта) db 00 10 00 00 ; смещение секции относительно адреса загрузки (4 байта) db 00 10 00 00 ; размер данных секции в файле (4 байта) db 00 02 00 00 ; смещение начала данных секции в файле (4 байта) db 00 02 00 00 ; Пропускаем 12 байтов db 0 0 0 0 0 0 0 0 0 0 0 0 ; атрибуты первой секции (4 байта): ; код, разрешено исполнение и чтение db 20 00 00 60 ; ; данные второй секции - аналогично: db '.rdata' 0 0 db 00 10 00 00 db 00 20 00 00 db 00 02 00 00 db 00 04 00 00 db 0 0 0 0 0 0 0 0 0 0 0 0 db 40 00 00 40 ; ; данные третьей секции db '.data' 0 0 0 db 00 10 00 00 db 00 30 00 00 db 00 02 00 00 db 00 06 00 00 db 0 0 0 0 0 0 0 0 0 0 0 0 db 40 00 00 C0

m 0 l 200 100 w q

Перед записью созданного "образа заголовка" сдвигаем его на 100h байт, чтобы все записалось правильно. Сохраним этот текст в файле "Header.txt".

Теперь у нас есть шаблон, который можно вставлять в начало exe-файла с 3 секциями, размеры которых не превышают 200h байт каждая. Чтобы протестировать его, нужно собрать "настоящий" exe-файл с его использованием. Для этого немного схитрим: вставим две пустые секции (содержащие лишь нули) в качестве секций данных; а в секции кода используем всего 2 байта: EB FE. Это инструкция, передающая управление на себя (как мы узнаем в дальнейшем). Т.е. наша программа просто зацикливается; но пока нам большего и не надо.

В блокноте создадим еще 2 простых файла. Первый - "s1.txt" (содержит наш "код"):

n s1.bin r cx 200 f 100 l 200 0 e 100 eb fe w q

Второй - "s2.txt" (секция в 200h байт, заполненная нулями):

n s2.bin r cx 200 f 100 l 200 0 w q

А теперь в том же Блокноте создаем файл "make.bat":

@echo off debug &lt header.txt &gt report.lst debug &lt s1.txt &gt&gt report.lst debug &lt s2.txt &gt&gt report.lst copy /b header.bin+s1.bin+s2.bin+s2.bin nil.exe




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