gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:04:31 25 4
gpt4 key购买 nike

64 位 Windows 似乎使用 rcx = r8 = &PEB 调用 exe 的入口点和 rdx = r9 = &entrypoint好像入口点被声明 entrypoint(PEB *peb, void *entry) .

这些细节是在任何地方指定的,还是没有记录在案且不值得依赖?

最佳答案

从 vista windows 调用 exe 入口点开始,带有一个参数 - PEB 的地址
所以exe入口点的签名必须是下一个

ULONG __stdcall ep(PEB* ); 

因为在 x64 中,第一个参数是通过 rcx 寄存器传递的 - 您可以在此处查看 PEB 的地址。另一个寄存器中的值是随机的。但我怎么说 - 这不仅仅与 64 位有关。在所有 Windows 版本中,第一个参数中将是 PEB 的地址。

这没有记录,但我确信非常可靠并且不会在新的 Windows 版本中改变。

在 wdk 中存在 nt.lib。这是静态(非导入)库 - 它为只能使用 ntdll.dll 导入(主启动执行应用程序,如 autochk.exe)的应用程序实现了微小的 crt 这个库实现了 exe 的入口点( NtProcessStartup[W]),它调用了你的 [w]main与通常的参数。和 NtProcessStartup[W]当前实现使用指向 PEB 的指针从第一个(和单个)agrument。假设我们链接到当前的 nt.lib 实现。因为这是静态库 - 代码 NtProcessStartup[W]将在您的 exe 中并且尚未更改。如果 Windows 不再在第一个参数中传递 PEB 的地址 - 所有与当前 nt.lib 链接的 exe 将在启动时崩溃。所以我认为这已经没有改变

关于c - rcx 是否总是指向进程入口点的 PEB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61684051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com