2011-05-17 58 views
3

一旦Windows将可执行文件加载到内存中并将执行转移到入口点,那么寄存器和堆栈中的值是否有意义?如果是这样,我可以在哪里找到关于它的更多信息?Windows初始执行上下文

回答

6

正式地,PE文件入口点的寄存器没有定义的值。您应该使用API​​,例如​​来检索您需要的信息。但是,由于最终将控制权转移到入口点的内核功能并没有太大改变,所以一些PE包装商和恶意软件开始依赖其特性。两个或多或少可靠寄存器是:

  • EAX指向应用程序的入口点(因为内核函数使用call eax跳转到它)

  • EBX指向进程环境块( PEB)。

+0

良好的信息,但你知道任何关于x64? – ST3 2016-12-19 09:40:18

+0

@ ST3不,但您可以检查调试器。 – 2016-12-19 09:56:25

+0

好的,但有一个问题,你确定'EAX'指向'EP'吗?我在我的机器上看到了'CALL EDX'。 – ST3 2016-12-19 10:45:56

1

Windows Internals第5版第5章详细介绍了Windows创建过程的机制。这将为您提供更多有关Windows在内存中加载可执行文件并将执行转移到入口点的信息。

我发现了这个最新的参考资料,它涵盖了各种操作系统和各种编译器在各种调用约定中如何使用寄存器。这是非常详细的,似乎全面: Agner Fog's Calling Conventions document

+1

链接已损坏。我认为这是它:http://www.agner.org/optimize/calling_conventions.pdf – aalku 2015-06-25 12:55:04