【发布时间】:2020-08-24 07:11:08
【问题描述】:
64 位 Windows 似乎使用 rcx = r8 = &PEB 和 rdx = r9 = &entrypoint 调用 exe 的入口点,就好像入口点被声明为 entrypoint(PEB *peb, void *entry)。
这些细节是否在任何地方指定,或者这些细节没有记录并且不值得依赖?
【问题讨论】:
-
它必须记录在某个地方,但请注意,要求外部文档或资源的问题不在本网站的主题范围内。我仍然对答案感兴趣。
-
现代 Windows(vista + 或 win7)使用单个参数调用 exe 入口点 - PEB 地址。这与 64 位无关。这对任何人来说。这没有记录
-
扯掉话题问题,但 RbMm 上面的评论听起来像是一个答案。
-
但是你可以依赖它,比如在 wdk 中存在 static nt.lib,它实现了一些最小的 nt crt。可能是为启动执行应用程序设计的,它只能使用 ntdll api。这个 lib use 事实上第一个参数是 PEB 指针。你可以链接到这个库,在这种情况下——为了你的应用程序不会崩溃——微软以后不能改变那个exe入口点指向PEB。但如果说是真的,这不是很有用 - 没有这个就可以使用 PEB 指针
-
@fuz:IMO 这个问题很好。它询问的是一个特定的事实,而不是只是文档。 “这发生在一个案例中;为什么?”形式的问题。或“一般情况下/便携式是否正确”通过引用文档来支持答案,例如ISO C++ 标准。如果这是一个问题,最后一句话可以改写为“所有 Windows 版本都这样做,依赖它是否安全?”没有明确提及文档。
标签: c windows winapi assembly x86-64