Начальный контекст выполнения Windows
Как только Windows загрузит исполняемый файл в память и перенесет выполнение в точку входа, имеют ли значение значения в регистрах и стеке? Если так, где я могу найти больше информации об этом?
2 ответа
Официально регистры в точке входа PE-файла не имеют определенных значений. Вы должны использовать API, такие как GetCommandLine
чтобы получить необходимую информацию. Однако, поскольку функция ядра, которая в конечном итоге передает управление точке входа, не сильно изменилась со старых времен, некоторые упаковщики PE и вредоносные программы начали полагаться на свои особенности. Два более или менее надежных регистра:
EAX указывает на точку входа приложения (потому что функция ядра использует
call eax
прыгнуть к нему)EBX указывает на блок среды процесса (PEB).
В главе 5 пятого издания Windows Internals подробно описывается механизм создания процесса в Windows. Это даст вам больше информации о том, как Windows загружает исполняемый файл в память и передает выполнение в точку входа.
Я нашел эту актуальную справочную информацию, которая описывает, как регистры используются в различных соглашениях о вызовах в различных операционных системах и различными компиляторами. Это довольно подробно и кажется всеобъемлющим: документ Соглашения о вызовах Агнера Фога