温馨提示×

怎样用objdump反汇编

小樊
49
2026-10-15 04:53:26
栏目: 编程语言

objdump 是 GNU binutils 中的一款强大工具,常用于**反汇编(disassemble)**可执行文件、目标文件或库文件,查看底层机器指令。下面从基础到进阶给你一个实用指南。


一、最基本用法

1. 反汇编整个文件

objdump -d your_program
  • -d / --disassemble:对包含指令的段进行反汇编
  • 输出包括:地址、机器码、汇编指令

2. 反汇编特定段

objdump -d -j .text your_program
  • -j:指定段(如 .text、.plt、.init)

二、常见实用选项

显示源代码 + 汇编(需编译时加 -g)

objdump -S your_program
  • -S:交错显示源码和汇编
  • 非常适合分析性能或调试

显示符号表

objdump -t your_program

显示所有段信息

objdump -h your_program

显示文件头(架构、入口地址等)

objdump -f your_program

三、控制反汇编格式

Intel 语法(x86 常用)

objdump -d -M intel your_program

AT&T 是默认语法,Intel 更易读。

显示指令编码

objdump -d -x your_program

或

objdump -d --insn-width=16 your_program

四、结合函数反汇编

只反汇编某个函数

objdump -d your_program | grep -A 30 '<main>:'

或用 nm 找地址:

nm your_program | grep main
objdump -d --start-address=0x401000 --stop-address=0x401050 your_program

五、针对不同类型的文件

1. 目标文件(.o)

objdump -d main.o

2. 静态库(.a)

objdump -d libxxx.a

3. 内核模块(.ko)

objdump -d -m arm module.ko

六、常见组合示例

分析 C 程序汇编

gcc -g -O0 test.c -o test
objdump -S -M intel test

分析 shellcode

objdump -b binary -m i386 -D shellcode.bin
  • -b binary:按原始二进制
  • -m:指定架构

七、注意事项

  • stripped 文件(去符号)依然可以反汇编,只是函数名看不到
  • 优化级别(-O2)会让汇编难以对应源码
  • 架构不同要用 -m(如 arm、mips、riscv)

如果你愿意,可以告诉我:

  • 你是 x86 / ARM / RISC-V?
  • 是 Linux 程序 / 固件 / shellcode?
  • 想 学汇编 / 做逆向 / 调 bug?

我可以给你更针对性的例子。

0 踩