Вобщем незнаю как реализовать сабж в fasm, в MASM'е это выглядит: Код (Text): assume esi:ptr IMAGE_DOS_HEADER а как будет в фасме? вот код: Код (Text): format PE console 4.0 include 'C:\asma\fasm\include\win32a.inc' entry start section '.data' data writeable readable buffer db 'hello world!',0 section '.code' code readable executable image_dos IMAGE_DOS_HEADER start: mov eax, [fs:0x30] mov eax, [eax+0xc] mov esi, [eax+0x1c] lodsd mov eax, [eax+0x8]; в еакс базовый адрес kernel32.dll mov image_dos, eax invoke ExitProcess,0 section '.idata' import data readable writeable library kernel32,'kernel32.dll' import kernel32,\ ExitProcess,'ExitProcess' Чтобы можно было обращатся mov edx, [image_dos.e_magic] к примеру. В файл %fasminc%/Equates/kernel32.dll добавил свою структуру согласно мсдн: Код (Text): struct IMAGE_DOS_HEADER e_magic dw ? ; Сигнатура заголовка e_cblp dw ? ; количество байт на последней странице файла e_cp dw ? ; количество страниц в файле e_crlc dw ? ; Relocations e_cparhdr dw ? ; Размер заголовка в параграфах e_minalloc dw ? ; Минимальные дополнительные параграфы e_maxalloc dw ? ; Максимальные дополнительные параграфы e_ss dw ? ; начальное относительное значение регистра SS e_sp dw ? ; начальное значение регистра SP e_csum dw ? ; контрольная сумма e_ip dw ? ; начальное значение регистра IP e_cs dw ? ; начальное относительное значение регистра CS e_lfarlc dw ? ; адрес в файле на таблицу переадресации e_ovno dw ? ; количество оверлеев e_res dw 4 dup(0) ; Зарезервировано e_oemid dw ? ; OEM идентифкатор e_oeminfo dw ? ; OEM информация e_res2 dw 10 dup(0) ; Зарезервировано e_lfanew dd ? ; адрес в файле нового .exe заголовка (PE) ends
mov esi, [eax+IMAGE_DOS_HEADER.e_lfanew] в esi будет содержимое e_lfanew поля ... mov eax, [eax+0x8]; в еакс базовый адрес kernel32.dll add eax, [eax+IMAGE_DOS_HEADER.e_lfanew] eax - теперь указывает на IMAGE_NT_HEADERS