Здравствуйте. Пытаюсь разобраться с PE загрузчиком ЕХЕ. получается все кроме импорта код: mov edi, [ebx].OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT*sizeof(IMAGE_DATA_DIRECTORY)].VirtualAddress test edi, edi jz next1 add edi, pNewImageBase assume edi : ptr IMAGE_IMPORT_DESCRIPTOR import1: cmp [edi].FirstThunk, 0 jz next1 mov eax, [edi].Name1 add eax, pNewImageBase invoke LoadLibraryA, eax mov hModule, eax push edi .IF [edi].OriginalFirstThunk mov esi, [edi].OriginalFirstThunk .ELSE mov esi, [edi].FirstThunk .ENDIF add esi, pNewImageBase mov edi, [edi].FirstThunk add edi, pNewImageBase @@: .IF dword ptr [esi] lodsd .IF !(eax & 80000000h) add eax, pNewImageBase inc eax inc eax .ELSE and eax, not 80000000h .ENDIF invoke GetProcAddress, hModule, eax stosd jmp @B .ENDIF pop edi add edi, sizeof(IMAGE_IMPORT_DESCRIPTOR) jmp import1 next1: в результате импорт не меняется подскажите пожалуйста по коду в чём заключается ошибка. сам не справляюсь. надеюсь на профи. спасибо p.s.: при загрузке длл этот код отлично работает, при ехе нет. ехе - обычный MessageBox + ExitProcess , собранный masm-ом
все делает то что должно, EP загружаемого вызывается, только адреса в импорте загруженного не соответствуют правильным
w_user, когда три года назад эту тему ковырял, за основу взял исходник загрузчика из темы http://forum.sources.ru/index.php?showtopic=148144