在 CentOS(或其他 Linux 发行版)里,“反汇编指令”通常指的是用工具(如 objdump、gdb、objcopy 等)把可执行文件 / 目标文件 / 内存中的机器码翻译成汇编指令来看。下面从「用什么工具」「怎么用」「怎么读懂反汇编结果」三个层面说明。
objdump(最常用)属于 binutils,一般 CentOS 自带。
objdump -d test
常用选项:
-d:反汇编可执行代码段-D:反汇编所有段-M intel:使用 Intel 语法(默认是 AT&T)-S:源码 + 汇编混合(需 -g 编译)-l:显示行号示例:
objdump -d -M intel test
gdb(调试时反汇编)gdb ./test
(gdb) disassemble main
或 Intel 语法:
(gdb) set disassembly-flavor intel
(gdb) disassemble main
查看某地址:
(gdb) x/10i $rip
readelf(辅助理解结构)readelf -h test
readelf -S test
假设 C 代码:
int add(int a, int b) {
return a + b;
}
编译:
gcc -O0 -c test.c -o test.o
objdump -d -M intel test.o
反汇编可能类似:
0000000000000000 <add>:
0: 55 push rbp
1: 48 89 e5 mov rbp, rsp
4: 89 7d fc mov DWORD PTR [rbp-4], edi
7: 89 75 f8 mov DWORD PTR [rbp-8], esi
a: 8b 45 fc mov eax, DWORD PTR [rbp-4]
d: 03 45 f8 add eax, DWORD PTR [rbp-8]
10: 5d pop rbp
11: c3 ret
push rbp / mov rbp, rsp:函数栈帧建立edi, esi:第 1、2 个参数(System V AMD64 调用约定)[rbp-4]、[rbp-8]:局部变量eax:返回值ret:返回调用者mov %rsp, %rbp
mov rbp, rsp
区别:
%gdb ./test core
(gdb) bt
(gdb) disassemble
gcc -O2
objdump -d
你会看到:
objdump -D -M intel malware
gcc -S → 看编译器生成的汇编objdump -d → 看最终二进制如果你有具体的反汇编代码贴出来,我可以直接逐行帮你解释。