如何让objdump输出Intel语法

95

如何告诉objdump以Intel语法而不是默认的AT&T语法输出汇编代码?

2个回答

150

你需要的是 -M intel。使用如下。

objdump -M intel -d program_name

24
在OS X上,/usr/bin/objdump可能实际上并不是objdump,而是llvm-objdump。你可以使用objdump --help,但它实际上并没有告诉你如何获取英特尔风格输出的选项,该选项似乎是-x86-asm-syntax=intel。叹气。 - John Clements
3
有没有一种简单的方法可以使 objdump 永久默认使用选项 -M intel - vitsoft
1
@vitsoft 实际上,似乎objdump不支持通过环境变量或rc文件传递“默认”参数。最好的方法似乎是在您的shell中创建一个函数,例如Bash中的objdump(){ / usr / bin / objdump -M intel "$ @"}。当然,这也有其自身的问题,例如如果您实际上没有反汇编任何东西,我不知道objdump是否会抱怨-M intel - Daniel Kamil Kozar
1
@JohnClements 截至 https://reviews.llvm.org/rGe510860656bb81bd90ae3cf8bb5ef4dc8cd33c18 ,llvm-objdump 已经像您预期的那样理解了 -Mintel。这将在 LLVM 13 中实现。 - thakis

12
如果你想要使用英特尔助记符代码(而不是AT&T助记符代码),可以使用以下命令: objdump -M intel intel-mnemonic -D <程序的目标文件>

3
实际上,-M intel 已经处理了这个问题。尝试反汇编序列 0f b7 c3 - 使用 -M intel,将得到 movzx eax,bx,而不使用它,objdump 默认会返回 AT&T 语法,你会得到 movzwl %bx,%eax - Daniel Kamil Kozar
1
哦,对了。为了更加明确,我完全忽略了那个。谢谢! - shigoel
7
从阅读手册中可以看出,-M intel-mnemonic 意味着是 intel,而不是反过来。虽然我仍不知道两者之间的区别。我使用了命令 objdump -M intel -d file > intelobjdump -M intel-mnemonic -d file > intel-mnemonic,接着用 diff intel intel-mnemonic 进行比较,但没有发现任何差异。为了确保其它部分也没有差异,我还尝试了使用 -D 替换 -d 命令。 - RastaJedi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接