rcx是否总是指向进程入口点的PEB?

问题描述 投票:4回答:1

64位的Windows似乎会用以下方式调用exe的入口点 rcx = r8 = &PEBrdx = r9 = &entrypoint 仿佛入口点被宣布为 entrypoint(PEB *peb, void *entry).

这些细节是否在任何地方被指定,或者这些细节没有被记录下来,不能被依赖?

c windows winapi assembly x86-64
1个回答
3
投票

从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 所以我认为这一点还没有被改变。

© www.soinside.com 2019 - 2024. All rights reserved.