начинать с перспективы windows вызывать точку входа exe с одним параметром - адресом PEB , поэтому подпись точки входа exe должна быть следующей
ULONG __stdcall ep(PEB* );
, потому что в x64 первый параметр передается через регистр rcx - здесь вы видите адрес PEB . значения в других регистрах случайны. но как я говорю - это относится не только к 64-битной. во всех версиях windows в первом параметре будет адрес PEB .
это не задокументировано, но я уверен, что это очень надежно и не будет изменено в новых версиях windows.
в wdk существует nt.lib . это stati c (не импортная) библиотека, которая реализует крошечный crt для приложений, которые могут использовать только ntdll.dll import (приложения для выполнения основной загрузки, например autochk.exe ) это Библиотека реализует точку входа exe (NtProcessStartup[W]
), которая затем называется вашим [w]main
с обычными параметрами. и NtProcessStartup[W]
текущая реализация использует указатель на PEB
из первого (и единственного) агрумента. Предположим, мы связываемся с текущей реализацией nt.lib . потому что это stati c lib - код NtProcessStartup[W]
будет внутри вашего exe и уже не изменен. если windows больше не будет передавать адрес PEB в первом аргументе - все exe, которые связаны с текущим nt.lib , будут срабатывать sh при запуске. поэтому я думаю, что это уже нельзя изменить