【发布时间】:2011-05-17 09:28:29
【问题描述】:
一旦 Windows 在内存中加载了可执行文件并将执行转移到入口点,寄存器和堆栈中的值是否有意义?如果是这样,我在哪里可以找到有关它的更多信息?
【问题讨论】:
标签: windows x86 loader assembly portable-executable
一旦 Windows 在内存中加载了可执行文件并将执行转移到入口点,寄存器和堆栈中的值是否有意义?如果是这样,我在哪里可以找到有关它的更多信息?
【问题讨论】:
标签: windows x86 loader assembly portable-executable
官方说,PE文件入口处的寄存器没有定义值。您应该使用 API,例如 GetCommandLine 来检索您需要的信息。但是,由于最终将控制权转移到入口点的内核功能与过去相比没有太大变化,因此一些 PE 打包程序和恶意软件开始依赖其特性。两个或多或少可靠的寄存器是:
EAX指向应用程序的入口点(因为内核函数使用call eax跳转到它)
EBX 指向进程环境块 (PEB)。
【讨论】:
EAX 指向EP 吗?我在我的机器上看到了CALL EDX。
Windows Internals Fifth Edition 的第 5 章详细介绍了 Windows 创建进程的机制。这将为您提供有关 Windows 在内存中加载可执行文件并将执行转移到入口点的更多信息。
我发现这个最新的参考资料涵盖了寄存器是如何在各种操作系统和各种编译器上的各种调用约定中使用的。它非常详细,并且看起来很全面: Agner Fog's Calling Conventions document
【讨论】: