温馨提示×

怎么用centos调试反汇编

小樊
33
2026-09-30 07:35:24
栏目: 智能运维

在 CentOS 上调试和反汇编程序,通常组合使用 GCC + GDB + objdump/readelf 等工具。下面按“从零开始”的思路给你一个完整流程。


一、准备调试环境(CentOS)

1. 安装必要工具

sudo yum install -y gcc gdb binutils

如果你需要 32 位支持(可选):

sudo yum install -y glibc-devel.i686 libgcc.i686

二、编写并编译可调试程序

示例 C 程序

// test.c
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int x = 3, y = 4;
    printf("sum=%d\n", add(x, y));
    return 0;
}

编译(带调试信息)

gcc -g -O0 test.c -o test

参数说明:

  • -g:生成调试符号
  • -O0:关闭优化(反汇编更直观)

三、使用 objdump 进行反汇编

1. 反汇编整个程序

objdump -d test

2. 反汇编指定函数(更常用)

objdump -d -M intel test | grep -A 20 '<add>'

参数说明:

  • -M intel:使用 Intel 语法(默认是 AT&T)
  • -d:反汇编可执行段

3. 查看符号表

objdump -t test
# 或
readelf -s test

四、使用 GDB 调试 + 实时反汇编

1. 启动 GDB

gdb ./test

2. 常用 GDB 命令

功能 命令
设置断点 break main
运行 run
单步(源码) step / next
单步(汇编) stepi
查看汇编 disassemble
查看当前汇编 disassemble $pc
查看寄存器 info registers
查看内存 x/10xw $rsp
切换 Intel 语法 set disassembly-flavor intel

示例

(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disassemble
(gdb) stepi
(gdb) info registers

五、调试已存在的二进制(无源码)

gdb ./binary
(gdb) info functions
(gdb) disassemble <function_name>

如果是 strip 过的程序:

file binary
# 无符号,只能靠地址调试

六、动态反汇编(运行中)

gdb -p <pid>

或

gdb ./test
(gdb) run
# 运行中 Ctrl+C
(gdb) disassemble $pc

七、常见问题

1. 看不到源码对应汇编?

  • 确认 -g 已加
  • 确认不是 strip 过的

2. 汇编看不懂?

  • 用 Intel 语法
  • 关优化(-O0)

3. CentOS 7/8 有区别吗?

  • 基本一样
  • CentOS 8 用 dnf 替代 yum

八、工具总结

工具 用途
gcc 编译
gdb 调试
objdump 静态反汇编
readelf ELF 结构分析
nm 符号查看

如果你愿意,我可以:

  • 给你 真实漏洞调试示例
  • 教你 从汇编看函数调用约定
  • 或针对 内核 / 用户态 / 恶意样本 场景讲

你现在是想学 逆向分析、漏洞调试 还是 理解程序运行机制?

0 踩