Начальный контекст выполнения Windows

Как только Windows загрузит исполняемый файл в память и перенесет выполнение в точку входа, имеют ли значение значения в регистрах и стеке? Если так, где я могу найти больше информации об этом?

2 ответа

Решение

Официально регистры в точке входа PE-файла не имеют определенных значений. Вы должны использовать API, такие как GetCommandLine чтобы получить необходимую информацию. Однако, поскольку функция ядра, которая в конечном итоге передает управление точке входа, не сильно изменилась со старых времен, некоторые упаковщики PE и вредоносные программы начали полагаться на свои особенности. Два более или менее надежных регистра:

  • EAX указывает на точку входа приложения (потому что функция ядра использует call eax прыгнуть к нему)

  • EBX указывает на блок среды процесса (PEB).

В главе 5 пятого издания Windows Internals подробно описывается механизм создания процесса в Windows. Это даст вам больше информации о том, как Windows загружает исполняемый файл в память и передает выполнение в точку входа.

Я нашел эту актуальную справочную информацию, которая описывает, как регистры используются в различных соглашениях о вызовах в различных операционных системах и различными компиляторами. Это довольно подробно и кажется всеобъемлющим: документ Соглашения о вызовах Агнера Фога

Другие вопросы по тегам