在 CentOS(或其他 Linux 系统)里,“反汇编指令”通常是指把二进制程序(机器码)翻译成汇编代码的操作,用来分析程序在 CPU 层面到底做了什么。
下面从“是什么、常用命令、例子、常见用途”给你讲清楚。
反汇编(disassembly):
例如:
mov eax, 1
int 0x80
objdump(最常用)系统自带,适合 ELF 文件(Linux 程序)
objdump -d 程序名
反汇编整个程序:
objdump -d ./a.out
只反汇编 main 函数:
objdump -d -j .text ./a.out | grep -A 30 '<main>:'
gdb(调试时反汇编)适合动态分析
gdb ./a.out
进入后:
disassemble main
或当前位置:
disas
ndisasm(适合裸机 / shellcode)ndisasm -b 32 shellcode.bin
objdump 常见参数说明| 参数 | 作用 |
|---|---|
-d |
反汇编可执行代码 |
-S |
源码+汇编对照 |
-M intel |
使用 Intel 语法 |
-j .text |
只反汇编代码段 |
示例(Intel 语法):
objdump -d -M intel ./a.out
int main() {
return 0;
}
编译:
gcc test.c -o test
反汇编:
objdump -d test
可能看到:
00000000004004b6 <main>:
4004b6: 55 push rbp
4004b7: 48 89 e5 mov rbp, rsp
4004ba: b8 00 00 00 00 mov eax, 0
4004bf: 5d pop rbp
4004c0: c3 ret
常见用途:
如果你说的是:
objdump -d如果你愿意,可以告诉我:
我可以按你的场景给你更针对性的例子。