gpt4 book ai didi

assembly - DOS 可执行文件中的 "MZ" header 及其对堆栈的影响

转载 作者:行者123 更新时间:2023-12-02 16:49:16 27 4
gpt4 key购买 nike

DOS 可执行文件的前 2 个字节是 0x4d 和 0x5a。如果这些被执行,0x4d 意味着 'dec ebp' 和 0x5a 是 'pop edx'。

'dec ebp' 将基址指针减 1,'pop edx' 将 esp 的值增加 4(x86 汇编)。我的问题是这些操作不会使堆栈处于不一致状态吗?而且由于命令行参数(如果有的话)是相对于 ebp 存储的,这些操作不会使命令行参数无法访问吗?

我可能遗漏了一些明显的东西,如果是这样请幽默我...

最佳答案

与 COM 类型的可执行文件不同 - COM 类型的可执行文件从程序镜像的第一个字节开始执行 - EXE 类型的可执行文件不应该以可执行代码开头。在 EXE 文件的开头有一个头 block ,其中包含实际程序入口点的地址等。

因此字节“MZ”(或者 - 假设同样有效 - “ZM”)不代表指令。它们只是用于识别格式的标记。

维基百科文章 DOS MZ executable 中有一个很好的概述.

注意:可执行文件的 DOS 部分是隐含的 16 位实模式,应该这样反汇编,而不是 32 位代码。

关于assembly - DOS 可执行文件中的 "MZ" header 及其对堆栈的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59354139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com