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 > intel
,objdump -M intel-mnemonic -d file > intel-mnemonic
,然后是diff intel intel-mnemonic
,没有区别。我什至尝试使用-D
而不是-d
,以防其他部分存在差异。以上是关于objdump 如何发出 intel 语法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 i386 上将“推 2000”从 AT&T asm 转换为 Intel 语法