如何在 Windows 上获取参与 ASLR 的可执行文件的(重定位)入口点?

How do get the (relocated) entry point of an executable participating in ASLR on Windows?

How do get the (relocated) entry point of an executable participating in ASLR on Windows?

假设可执行文件已经加载并且它参与了 ASLR。

PE header 在没有 ASLR 的情况下加载时给出可执行文件的入口点。但是,ASLR 应该是 "random",所以 header 不能告诉任何关于新入口点的信息?

我如何在内存中找到我的 ASLR 可执行文件,以便,例如,我可以检查它并(可能)修改它。

如果您的代码在您要查找其主模块的进程的上下文中是 运行,您可以调用 GetModuleHandle or GetModuleHandleEx,传递 NULL 而不是模块名称。

请注意,在32位或64位Windows中,"module handle"实际上是指向模块虚拟地址的指针。 (这在 16 位 Windows 中并非如此。)

如果你的代码是运行在一个单独的进程中,你可以使用EnumProcessModules as described here