Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Существующие примеры программ размером 268 байт не содержат ни одной секции, и фактически, целиком помещаются внутри заголовка PE, для загрузки которого Windows выделяет одну страницу памяти (4КБ).Для загрузки заголовка выделяется
ALIGN_UP(SizeOfHeaders, max(SectionAlignment, PAGE_SIZE)). Так что можно поставить SizeOfHeaders больше страницы и без секций обойтись.На WinXP моя программа, к сожалению, не работает: та отказывается загружать программы, у которых в каталоге менее 0xD записей.Там просто часть кода поддержки совместимости смотрит на Directories[DEBUG].Size, не проверяя, что DEBUG действительно есть. Если выставить соответствующий dword в нуль, всё будет работать.
DbgBreakPoint внутри LdrpInitializeProcess:
часть таблицы импорта (последние 0x16 её байт нулевые, и в файле не хранятся)Если честно добить файл нулями, проблема будет воспроизводиться?
ntdll!_LdrpInitialize+0x178: 7c84a446 57 push edi 7c84a447 e85e530100 call ntdll!LdrpInitializationFailure (7c85f7aa) 7c84a44c 57 push edi 7c84a44d e890e0fdff call ntdll!RtlRaiseStatus (7c8284e2) 7c84a452 cc int 3
ntdll!KiUserApcDispatcher+0x25Если честно добить файл нулями, проблема будет воспроизводиться?
r;t;z(eax!=c000007b).sympath SRV*c:\symcache*http://msdl.microsoft.com/download/symbols.reloadbp ntdll!LdrpSnapIAT, дождаться второго срабатывания (первый вызов — для kernel32 -> ntdll) и запустить команду выше уже с этого момента.При отсутствии IMAGE_DIRECTORY_ENTRY_IAT = 0xC в XP есть засада, что таблица импорта должна быть в какой-нибудь секции, не в заголовке, но это проблема, только если делать программу целиком в заголовке без секций.
Для загрузки заголовка выделяется ALIGN_UP(SizeOfHeaders, max(SectionAlignment, PAGE_SIZE)). Так что можно поставить SizeOfHeaders больше страницы и без секций обойтись.
SizeOfHeaders больше 0x1000 прога напрочь отказывается загружаться.если хотя бы одна секция объявлена, то FileAlignment должен быть не меньше 0x200, а SectionAlignment должен быть 0x1000
«Digital Rain» для Windows в 314 байтах