在 CentOS 上进行反汇编(Disassembly)入门,一般流程是:准备环境 → 编写/获取程序 → 使用反汇编工具 → 结合调试器分析。下面给你一个从零开始的实用路线。
sudo yum groupinstall "Development Tools"
sudo yum install gdb binutils
常用工具说明:
gcc / g++:编译 C/C++objdump:反汇编 ELF 文件(最基础)gdb:调试 & 动态分析readelf:查看 ELF 结构#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int x = add(3, 4);
printf("%d\n", x);
return 0;
}
编译(关闭优化,方便看汇编):
gcc -O0 -g -o hello hello.c
objdump -d hello
重点看:
<main><add>示例输出(简化):
0000000000400526 <add>:
400526: 55 push %rbp
400527: 48 89 e5 mov %rsp,%rbp
40052a: 89 7d fc mov %edi,-0x4(%rbp)
40052d: 89 75 f8 mov %esi,-0x8(%rbp)
400530: 8b 45 fc mov -0x4(%rbp),%eax
400533: 03 45 f8 add -0x8(%rbp),%eax
400536: 5d pop %rbp
400537: c3 ret
objdump -d -M intel hello | grep -A 30 "<main>:"
推荐加:
-M intel
使用 Intel 语法(比 AT&T 好读)
gdb ./hello
disassemble main
或:
set disassembly-flavor intel
disassemble main
break main
run
stepi
info registers
非常有助于理解:
sudo yum install radare2
r2 -d ./hello
objdump -dmain / call / ret / push / pop如果你愿意,我可以:
你现在是 纯入门 / 有 C 基础 / 有汇编基础?