objdump 如何发出 intel 语法

Posted

技术标签:

【中文标题】objdump 如何发出 intel 语法【英文标题】:How can objdump emit intel syntax 【发布时间】:2012-05-08 21:50:21 【问题描述】:

我如何告诉objdump 以英特尔语法而不是默认的 AT&T 语法发出程序集?

【问题讨论】:

【参考方案1】:

您要查找的是-M intel。如下使用。

objdump -M intel -d program_name

【讨论】:

在 OS X 上,事实证明 /usr/bin/objdump 可能根本不是 objdump,而是 llvm-objdump。您可以使用 objdump --help,但它实际上并没有告诉您提供英特尔风格输出的选项,这似乎是 -x86-asm-syntax=intel 。叹息。 有没有一种简单的方法可以让objdump 使用选项-M intel 作为永久默认值 @vitsoft 并非如此,似乎objdump 不支持通过环境变量或rc 文件传递​​“默认”参数。最好的方法似乎是在你的 shell 中创建一个函数,比如 Bash 中的objdump() /usr/bin/objdump -M intel "$@" 。当然,这有其自身的一系列问题,例如,如果您没有真正拆卸某些东西,我不知道objdump 是否不会抱怨-M intel @JohnClements 从 reviews.llvm.org/rGe510860656bb81bd90ae3cf8bb5ef4dc8cd33c18 开始,llvm-objdump 理解 -Mintel 就像你所期望的那样。这将在 LLVM 13 中。【参考方案2】:

如果您还想要 Intel 助记符(而不是 AT&T 助记符),您可以使用:

objdump -M intel intel-mnemonic -D <program's-object-file>

【讨论】:

实际上,-M intel 已经解决了这个问题。尝试反汇编序列0f b7 c3 - 使用-M intel,这将为您提供movzx eax,bx,而没有它,objdump 默认恢复为AT&T,您将获得movzwl %bx,%eax 哦,对了。为了更加明确,我完全忽略了这一点。谢谢! 通过阅读手册,-M intel-mnemonic 暗示 intel,而不是相反。我仍然不知道两者之间的区别。我做了objdump -M intel -d file > intelobjdump -M intel-mnemonic -d file > intel-mnemonic,然后是diff intel intel-mnemonic,没有区别。我什至尝试使用-D 而不是-d,以防其他部分存在差异。

以上是关于objdump 如何发出 intel 语法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gcc 生成 Intel 语法的汇编代码?

如何选择数据表中的不同行并存储到数组中

如何在 Intel 语法中使用 clang 生成汇编代码?

如何在 i386 上将“推 2000”从 AT&T asm 转换为 Intel 语法

如何将此代码从 Intel(nasm) 转换为 AT&T(gas) 语法?

内联 intel 语法到内联 gcc