64位的Windows似乎会用以下方式调用exe的入口点 rcx = r8 = &PEB
和 rdx = r9 = &entrypoint
仿佛入口点被宣布为 entrypoint(PEB *peb, void *entry)
.
这些细节是否在任何地方被指定,或者这些细节没有被记录下来,不能被依赖?
从vista windows开始调用exe入口点,有一个参数--地址 PEB所以,exe入口点的签名必须在后面
ULONG __stdcall ep(PEB* );
因为在x64中,第一个参数是通过 rcx 注册--您查看地址 PEB 在这里,另一个寄存器的值是随机的。但我怎么说 - 这是不相关的64位只。PEB 的第一个参数。
这是没有记录的,但我肯定非常可靠,不会在新的Windows版本中改变。
在 wdk 存在 nt.lib.这是一个静态的(不是导入)库--它实现了对只能使用 ntdll.dll 导入(主引导执行应用程序,如 autochk.exe)这个库实现了exe的入口点(NtProcessStartup[W]
),这比叫你的 [w]main
用通常的参数。NtProcessStartup[W]
当前执行使用指针 PEB
假设我们与当前的一个(单一的)论点联系在一起。nt.lib 因为这是静态lib-----------------------------------------------------------的代码。NtProcessStartup[W]
将会在你的exe里面,而且还没有被改变。PEB 在第一个参数中--所有与当前的 nt.lib 所以我认为这一点还没有被改变。