一旦Windows在内存中加载了可执行文件并将执行转移到入口点,寄存器和堆栈中的值是否有意义?如果是这样,我在哪里可以找到更多关于它的信息?
答案 0 :(得分:7)
正式地说,PE文件入口点的寄存器没有定义的值。您应该使用API(例如GetCommandLine
)来检索所需的信息。但是,由于最终将控制转移到入口点的内核功能与过去相比没有太大变化,因此一些PE打包器和恶意软件开始依赖于它的特性。两个或多或少可靠的寄存器是:
EAX指向应用程序的入口点(因为内核函数使用call eax
跳转到它)
EBX指向流程环境块(PEB)。
答案 1 :(得分:1)
Windows Internals第五版的第5章详细介绍了Windows创建流程的机制。这将为您提供有关Windows在内存中加载可执行文件并将执行转移到入口点的更多信息。
我找到了这个最新的参考资料,其中介绍了如何在各种操作系统和各种编译器的各种调用约定中使用寄存器。它非常详细,看起来很全面: Agner Fog's Calling Conventions document