【问题标题】:Windows initial execution contextWindows 初始执行上下文
【发布时间】:2011-05-17 09:28:29
【问题描述】:

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

【问题讨论】:

    标签: windows x86 loader assembly portable-executable


    【解决方案1】:

    官方说,PE文件入口处的寄存器没有定义值。您应该使用 API,例如 GetCommandLine 来检索您需要的信息。但是,由于最终将控制权转移到入口点的内核功能与过去相比没有太大变化,因此一些 PE 打包程序和恶意软件开始依赖其特性。两个或多或少可靠的寄存器是:

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

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

    【讨论】:

    • 好信息,但你对 x64 有什么了解吗?
    • @ST3 否,但您可能可以签入调试器。
    • 好的,但是有一个问题,你确定EAX 指向EP 吗?我在我的机器上看到了CALL EDX
    • 好的,我想它在某个时候已经改变了。如果你能弄清楚什么时候,请随时编辑答案。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2015-09-19
    • 2017-03-25
    • 2014-06-25
    相关资源
    最近更新 更多