在 Linux 下,objdump 是非常常用的反汇编 / 分析二进制文件的工具。下面从基本用法 → 常用选项 → 实战例子给你讲清楚。
objdump -d 程序名
例如:
objdump -d a.out
作用:
✅ 对 可执行代码段 进行反汇编(默认是 AT&T 语法)
objdump -D a.out
-d:只反汇编可执行段-D:反汇编所有段(包括数据段)objdump -d -M intel a.out
或:
objdump -M intel -D a.out
默认是 AT&T 语法(
mov %eax,%ebx)
Intel 是mov ebx, eax
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() {
objdump -h a.out
会显示:
.text.data.bssobjdump -t a.out
或只看动态符号:
objdump -T a.out
objdump -f a.out
objdump -d a.out | grep -A 20 "<main>:"
或者:
objdump -d -M intel a.out | less
然后搜索 main
gcc -g -o test test.c
objdump -d -M intel -S test
gcc -s -o test test.c
objdump -d -M intel test
只能看到地址,没有函数名。
objdump -d -M intel libxxx.so
gdb ./a.out
(gdb) disassemble main
objdump适合静态分析
gdb适合动态调试
| 工具 | 用途 |
|---|---|
| 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
如果你愿意,可以告诉我:
我可以直接给你针对性的 objdump 用法示例。