从 vista windows 开始,使用一个参数调用 exe 入口点 - PEB的地址 ,因此 exe 入口点的签名必须是下一个
ULONG __stdcall ep(PEB* );
Run Code Online (Sandbox Code Playgroud)
因为在 x64 中,第一个参数是通过rcx寄存器传递的 - 您可以在此处查看PEB的地址。另一个寄存器中的值是随机的。但我怎么说 - 这不仅仅与 64 位相关。在所有 Windows 版本中,第一个参数中将包含PEB的地址。
这没有记录,但我确信非常可靠,并且在新的 Windows 版本中不会改变。
在wdk中存在nt.lib。这是静态(非导入)库 - 它为只能使用ntdll.dll导入的应用程序实现了微型 crt(主要启动执行应用程序,如autochk.exe)此库实现了 exe ( ) 的入口点,该入口点比使用常用参数调用NtProcessStartup[W]您的[w]main。当前NtProcessStartup[W]的实现使用指向PEB第一个(和单个)参数的指针。假设我们链接到当前的nt.lib实现。因为这是静态库 - 代码NtProcessStartup[W]将位于您的 exe 内部并且尚未更改。如果 Windows 不再在第一个参数中传递PEB的地址 - 所有与当前nt.lib链接的 exe将在启动时崩溃。所以我认为这已经不会改变
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |