c - rcx 是否总是指向进程入口点的 PEB?
问题描述
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 位无关。在所有 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启动时会崩溃。所以我认为这已经没有改变
推荐阅读
- python - TfidfVectorizer的词汇表和get_features()之间的区别?
- html - 如何使用 CSS 创建 3 段甜甜圈/环?
- java - Delete 和 DeleteById 方法在 Hibernate 中不起作用
- java - 错误:无法找到或加载主类 -Xms1G
- vba - vba scrape html - 获取具有动态类的元素
- user-interface - 在 Tkinter GUI 中嵌入散景和大数据
- javascript - 在 JavaScript 中使用 setInterval 循环时如何让精灵停止移动
- javascript - 选中复选框时,如何将表单控件的所有值传递给另一个表单?
- android-studio - 如何在 Google Play 音乐中添加浮动活动,例如“正在播放音乐”
- r - 为什么这段代码使用 == 和 | 运算符的结果为 TRUE