ARM架构下使用objdump:如何将目标文件反汇编为x86-64格式
核心结论
ARM64(elf64-littleaarch64)和x86-64是完全独立的CPU架构,目标文件中的机器码与架构强绑定,无法通过反汇编工具直接将ARM64机器码转换为x86-64 Intel格式汇编。以下针对两种常见需求给出解决方案:
需求1:将ARM64汇编逻辑转换为等价的x86-64 Intel汇编
这属于指令集翻译(而非反汇编),没有全自动的完美工具,因为两种架构的设计模型差异极大(ARM是Load/Store架构的RISC,x86-64是CISC)。可行方案:
- 手动改写:分析ARM64汇编的功能逻辑,用x86-64 Intel指令重新实现。例如ARM的
ldr x0, [x1]对应x86的mov rax, [rbx](Intel格式)。 - 逆向工具辅助:使用Binary Ninja、Ghidra等逆向分析工具,先将ARM64二进制转成中间表示(IR),再导出为x86-64汇编,最后手动调整以保证逻辑正确、性能合理。
需求2:获取x86-64架构的目标文件及Intel格式汇编
如果你的真实需求是得到x86-64版本的Intel风格汇编,正确步骤如下:
- 确保持有源代码(无源代码则只能参考需求1的二进制翻译方案);
- 用x86-64架构的编译器重新编译源代码:
# 本地x86-64环境编译 gcc -c -m64 source.c -o example_x86.o # 交叉编译(如在ARM64机器上生成x86-64目标文件) x86_64-linux-gnu-gcc -c source.c -o example_x86.o - 对生成的x86-64目标文件反汇编,指定输出Intel格式:
其中objdump -d -M intel example_x86.o-M intel参数用于切换objdump的输出风格为Intel格式(默认是AT&T格式)。
内容的提问来源于stack exchange,提问作者Helix
相关产品推荐
相关产品推荐

