Разбирался с PE форматом сейчас. Не понял одну вещь. Вот мы сделали Mapping файла. А дальше? как перейти к списку секций нпример? И как дальше работать с ним? как заполнить стрктуру. Разъясните плз
ты структуру читал? сначала идет МЗ-заголовок. В нем есть поле, указывающее на его размер. Следовательно, это поле - указатель на след. заголовок: РЕ. Потом таблица директорий, таблица секций, в которой указаны ВСЕ данные о секциях (даже слишком много). В чем собсно вопрос? Что в структуре РЕ тебе не понятно?
ну читал я структуру. тоесть в хэндле маппинга будет указатель на MZ заголовок и даллее надо смещаться что бы перейти к таблице секций и так далее? И если это правильно то на сколько смещаться?
ну во-первых, по этим линкам все расписано. Ладно, возможно там и правда несколько запутанно. Попробуй посмотреть http://wasm.ru/article.php?article=1002001 - тут вроде бы все как надо. Если останутся вопросы, тогда напишу уже по смещениям, что и где считать
Код (Text): format PE GUI 5.0 include '%fasminc%\win32ax.inc' section '.code' code writeable readable executable ;const IMAGE_NT_SIGNATURE equ 4550h IMAGE_DOS_SIGNATURE equ 5A4Dh ;structs struct IMAGE_DOS_HEADER e_magic dw ? e_cblp dw ? e_cp dw ? e_crlc dw ? e_cparhdr dw ? e_minalloc dw ? e_maxalloc dw ? e_ss dw ? e_sp dw ? e_csum dw ? e_ip dw ? e_cs dw ? e_lfarlc dw ? e_ovno dw ? e_res dw 4 dup(0) e_oemid dw ? e_oeminfo dw ? e_res2 dw 10 dup(0) e_lfanew dd ? ends struct IMAGE_DATA_DIRECTORY VirtualAddress dd ? isize dd ? ends struct IMAGE_FILE_HEADER Machine dw ? NumberOfSections dw ? TimeDateStamp dd ? PointerToSymbolTable dd ? NumberOfSymbols dd ? SizeOfOptionalHeader dw ? Characteristics dw ? ends struct IMAGE_OPTIONAL_HEADER32 Magic dw ? MajorLinkerVersion db ? MinorLinkerVersion db ? SizeOfCode dd ? SizeOfInitializedData dd ? SizeOfUninitializedData dd ? AddressOfEntryPoint dd ? BaseOfCode dd ? BaseOfData dd ? ImageBase dd ? SectionAlignment dd ? FileAlignment dd ? MajorOperatingSystemVersion dw ? MinorOperatingSystemVersion dw ? MajorImageVersion dw ? MinorImageVersion dw ? MajorSubsystemVersion dw ? MinorSubsystemVersion dw ? Win32VersionValue dd ? SizeOfImage dd ? SizeOfHeaders dd ? CheckSum dd ? Subsystem dw ? DllCharacteristics dw ? SizeOfStackReserve dd ? SizeOfStackCommit dd ? SizeOfHeapReserve dd ? SizeOfHeapCommit dd ? LoaderFlags dd ? NumberOfRvaAndSizes dd ? DataDirectory IMAGE_DATA_DIRECTORY 16 dup(0) ends struct IMAGE_NT_HEADERS Signature dd ? FileHeader IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32 ends ;var hFile dd ? hMapping dd ? pMapping dd ? szYes db 'YES',0 szNo db 'no',0 szPath db 'cod.exe',0 entry $ invoke CreateFile,szPath,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 mov [hFile],eax invoke CreateFileMapping,[hFile],0,PAGE_READONLY,0,0,0 mov [hMapping],eax invoke MapViewOfFile,[hMapping],FILE_MAP_READ,0,0,0 mov [pMapping],eax mov edi,[pMapping] assume edi:ptr IMAGE_DOS_HEADER mov eax,IMAGE_DOS_SIGNATURE cmp [edi].e_magic,eax jz _next invoke MessageBox,0,0,0,0 _next: add edi,[edi].e_ifanew assume edi:ptr IMAGE_NT_HEADERS mov eax,IMAGE_NT_SIGNATURE cmp [edi].Signature,eax jz _ok invoke MessageBox,0,0,0,0 _exit: invoke ExitProcess,0 _ok: invoke MessageBox,0,szYes,0,0 jmp _exit section '.import' import readable writable library kernel32, 'kernel32.dll', \ user32, 'user32.dll' include '%fasminc%\API\kernel32.inc' include '%fasminc%\API\user32.inc' фасм ругается на assume edi:ptr IMAGE_DOS_HEADER пишет illegal instruction почему? PS поправьте please название темы(:
qwertyui http://wasm.ru/forum/viewtopic.php?id=15579 http://wasm.ru/forum/viewtopic.php?id=26706 http://wasm.ru/forum/viewtopic.php?id=9459 Если уж так хоцца. Прибавляй к регистру смещение заданного элемента в структуре.
ога спасибо а можно вот так mov [asd.e_magic],[pMapping+2]? asd указатель на структуру IMAGE_DOS_HEADER , а pMapping то что возвращает функция MapViewOfFile. Точнее, не так спросил. Вот к примеру есть укзатель на структуру image_dos_header что бы добраться до e_magic нужно прибавить 2? тоесть если edi указывает на image_dos_header то e_magic будте [edi+2]?