在OSX10.6上反汇编到x86_64(但使用_Intel_语法)

时间:2009-11-13 08:45:02

标签: macos assembly x86 x86-64

我知道otool -tv,但我宁愿使用 Intel 语法而不是AT& Ts,主要是为了轻松地在书中跟随而不必查看数千个%$

我也很感激我可能会找到gdb配置文件的任何提示。

编辑:我忘记了:我正在运行一个64位处理器,但是想知道是否可以将它拆分成32位汇编?不仅如此,OSX的gdb list命令与标准GNU版本的工作方式有何不同?

非常感谢!

(另外,如果你有任何想法,我可以从C - > MIPS找到一个小的反汇编程序,玩起来会非常有趣。但不是必需的!)

5 个答案:

答案 0 :(得分:8)

要回答第二个问题,如果代码已经编译成64位和32位的胖二进制文件,则可以使用otool -arch i386 -tv来反汇编二进制文件的32位片段; otool -arch x86_64 -tv将为您提供64位部分(在SnowLeopard上,如果没有传递-arch标志,这也是默认行为。)

另请注意,虽然otool不支持Intel语法,但gdb(set disassembly-flavor intel)和XCode(首选项 - >调试 - >反汇编样式)可以。

答案 1 :(得分:2)

(我知道这是一个老问题,但是我想为通过搜索引擎来到这里的人们提供最新答案)。

在最新版本的macOS(我正在运行10.14.5)上,有一个objdump命令是基于LLVM的,不是 来自GNU项目的命令。它提供了(隐藏)选项,可使用Intel语法进行反汇编。例如,/bin/echo可以如下分解:

objdump -disassemble -x86-asm-syntax=intel /bin/echo

答案 2 :(得分:1)

使用Objdump,您可以使用-d -M intel进行反汇编,显然-m可用于指定体系结构。

答案 3 :(得分:0)

您可以使用A2I从AT& T转换为英特尔语法:http://membres.lycos.fr/placr/a2i.html

答案 4 :(得分:0)

对于GDB,在.gdbinit文件中,添加:

  

设置disassembly-flavor intel

然后它将是gdb的默认语法。