Уважаемые гуру, Я внимательно прочитал статьи про упаковщики и про написание HelloWorld в машинном коде, и попытался вручную создать PE файл. Этот файл не имеет никаких директорий и имеет только секцию кода где расположены байты соответствующие коду Код (Text): mov eax, eax nop pop ebp retn PEiD показывает что файл валиден, все поля заголовка вроде в порядке, но файл так и не хочет запускаться (выдает Is Not valid Win32 Application). Дизассемблер его без проблем понимает. Пожалуйста, подскажите в чем моя ошибка. _1326832765__1.rar
Имхо PE корявый т.к. винда его даже не грузит, думаю в PEiD не преследовалась цель определения валидности заголовка, поищи утилиту PE Valid кажется, и не беспокой по пустякам народ
MiSterZero Размер экзешника в том туториале получался 1К. Ваш экзешник что-то очень большой. Да и без директории импорта NT такой файл не загрузит.
Тут точно не импорт, иначе винда бы его загрузила, не нашла кода на "точке входа" kernell32.dll и молча же (если нет дебагера) выгрузила, так и не стартанув, а так ругается
Дело не в том что где не грузится. Народ не прикидывайтесь ламерками, все уже давно ясно, пора переходть на солярис 10. Тем кто не понял: pe полное *, потому что содрано (причем очень криво) с coff формата, и так вся ОС. Все содрано с нормальных систем: оформление, функциональность, прочее. Мысли: непомогло даже перименование в com.
Народ, как не стыдно флеймить? Человек ведь не какой-нибудь RTFM вопрос задал. MiSterZero Твоя ошибка в полях опционального заголовка SizeOfHeaders и SizeOfImage. К сожалению в статьях на русском этим полям не уделено должное внимание, а они очень важны для работы загрузчика. Поле SizeOfHeaders должно содержать рназмер всех заголовков включая также заголовки всех секций. Поле SizeOfImage должно содержать SizeOfHeaders + сумму SizeOfRawData всех секций выровненную на SectionAlignment. В твоем случае это должны быть следующие значения: SizeOfHeaders = 0x0300 SizeOfImage = 0x2000 После таких исправлений файл загружается. ============================================ Также хочу обратить твое внимание на одну ошибку, в некоторых статьях говориться, что NT загружает в память только явно определенные библиотеки, и что файл без импорта работать не будет. Это правильно только частично, на самом деле в любой процесс будет загружена ntdll.dll независимо от ее присутствия в импорте, а для IMAGE_SUBSYSTEM_WINDOWS_GUI или IMAGE_SUBSYSTEM_WINDOWS_CUI будет еще загружена kernel32.dll, но инициализирована она НЕ БУДЕТ. Поэтому если требуется использовать Win32API, то загрузить kernel32.dll придется явно, или придется создавать импорт. =============================== В атаче лежит твой исправленный файл, теперь он загружается, это легко увидеть под отладчиком. _2048393392__1.rar
Ms Rem В том то и дело, что kernel32.dll сама загружена НЕ БУДЕТ (все NT до XP), пофиг SUBSYSTEM http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=6374
bogrus В атаче лежит пример екзешника не содержащего никакого импорта, который просто выполняет комманду jmp $. Запускаем его, открываем PeTools и смотрим какие библиотеки загружены. То что звгружается kernel32.dll проверено экспериментальным путем по крайней мере для Windows XP. Другое дело в том, что библиотека загружается, но не инициализируется, тоесть не настраивается импорт, релоки и не вызывается ее точка входа. _1039303713__Sample.exe
XP да, больше нигде эти примеры не запустятся, т.к. "Don't know how to continue because memory at address 793A87B3 is not readable. Try to change EIP or pass exception to program." И по адресу 793A87B3 (w2ksp4ru) действительно ничего нет, а должен быть kernel32.dll, собсно экспериментировать сильно не надо, олли покажет лог и карту памяти Код (Text): ====================================================================== ========================== File 'C:\temp\_1039303713__Sample.exe' New process with ID 00000348 created 00401000 Main thread with ID 00000268 created 00400000 Module C:\temp\_1039303713__Sample.exe 77F80000 Module C:\WINNT\system32\ntdll.dll 793A87B3 Access violation when executing [793A87B3] ====================================================================== ========================== Address Size Owner Section Contains Type Access Initial 00010000 00001000 Priv 00021004 RW RW 00020000 00001000 Priv 00021004 RW RW 0013E000 00001000 Priv 00021104 RW Guarded RW 0013F000 00011000 stack of main thread Priv 00021104 RW Guarded RW 00150000 00003000 Priv 00021004 RW RW 00400000 00001000 _1039303 PE header Imag 01001002 R RWE 00401000 00001000 _1039303 CODE code Imag 01001002 R RWE 77F80000 00001000 ntdll PE header Imag 01001002 R RWE 77F81000 00045000 ntdll .text code,exports Imag 01001002 R RWE 77FC6000 00005000 ntdll ECODE code Imag 01001002 R RWE 77FCB000 00004000 ntdll PAGE code Imag 01001002 R RWE 77FCF000 00003000 ntdll .data data Imag 01001002 R RWE 77FD2000 00028000 ntdll .rsrc resources Imag 01001002 R RWE 77FFA000 00002000 ntdll .reloc relocations Imag 01001002 R RWE 7FFB0000 00024000 Map 00041002 R R 7FFDE000 00001000 data block of main thread Priv 00021040 RWE RWE 7FFDF000 00001000 Priv 00021040 RWE RWE 7FFE0000 00001000 Priv 00021002 R R ================================================================================================