Начальный контекст выполнения Windows - PullRequest
3 голосов
/ 17 мая 2011

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

Ответы [ 2 ]

7 голосов
/ 17 мая 2011

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

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

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

1 голос
/ 17 мая 2011

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

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

...