温馨提示×

linux反汇编objdump咋用

小樊
40
2026-10-26 22:35:13
栏目: 智能运维

在 Linux 下,objdump 是非常常用的反汇编 / 分析二进制文件的工具。下面从基本用法 → 常用选项 → 实战例子给你讲清楚。


一、最基础用法

objdump -d 程序名

例如:

objdump -d a.out

作用:
✅ 对 可执行代码段 进行反汇编(默认是 AT&T 语法)


二、常用选项(重点)

1️⃣ 反汇编整个文件

objdump -D a.out
  • -d:只反汇编可执行段
  • -D:反汇编所有段(包括数据段)

2️⃣ Intel 语法(更直观,推荐)

objdump -d -M intel a.out

或:

objdump -M intel -D a.out

默认是 AT&T 语法(mov %eax,%ebx)
Intel 是 mov ebx, eax


3️⃣ 显示源代码 + 汇编(调试用)

objdump -d -S a.out

前提:

gcc -g -o a.out a.c

效果:

 400526: 55          push rbp
 400527: 48 89 e5    mov rbp,rsp
 // int main() {

4️⃣ 查看段信息

objdump -h a.out

会显示:

  • .text
  • .data
  • .bss
  • 地址、大小、权限

5️⃣ 查看符号表

objdump -t a.out

或只看动态符号:

objdump -T a.out

6️⃣ 查看文件头(架构、入口地址)

objdump -f a.out

7️⃣ 反汇编指定函数

objdump -d a.out | grep -A 20 "<main>:"

或者:

objdump -d -M intel a.out | less

然后搜索 main


三、常见实战场景

✅ 1. 分析 C 程序汇编

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

✅ 2. 分析 stripped 程序(无符号)

gcc -s -o test test.c
objdump -d -M intel test

只能看到地址,没有函数名。


✅ 3. 分析动态库

objdump -d -M intel libxxx.so

✅ 4. 配合 gdb 使用

gdb ./a.out
(gdb) disassemble main

objdump 适合静态分析
gdb 适合动态调试


四、和 readelf 的区别(顺带一提)

工具 用途
objdump 反汇编、看汇编
readelf 看 ELF 结构(更底层)
readelf -h a.out
readelf -S a.out

五、一个完整例子

gcc -g -o demo demo.c
objdump -d -M intel -S demo > demo.asm
less demo.asm

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

  • 你是 CTF / 逆向 / 学习汇编 / 调试 bug
  • 用的是 x86 / x64 / ARM

我可以直接给你针对性的 objdump 用法示例。

0 踩