温馨提示×

怎样调试linux反汇编

小樊
41
2026-09-24 17:06:29
栏目: 智能运维

调试 Linux 下的反汇编代码,通常分 “静态分析” 和 “动态调试” 两条路线,也可以两者结合。下面按实用角度给你一套清晰流程。


一、准备环境

1. 工具安装

常见工具:

sudo apt install gdb objdump radare2 ltrace strace nasm gcc

推荐组合:

  • GDB:动态调试
  • objdump:静态反汇编
  • radare2 / ghidra:进阶逆向
  • strace / ltrace:系统调用 / 库函数跟踪

二、静态反汇编(先看代码)

1. 反汇编 ELF

objdump -d ./a.out

常用选项:

objdump -d -M intel ./a.out   # Intel 语法
objdump -S ./a.out            # 源码+汇编(需 -g 编译)

2. 查看符号和段

readelf -h ./a.out     # ELF 头
readelf -s ./a.out     # 符号表
nm ./a.out

3. 找 main 函数

objdump -d ./a.out | grep -A 30 "<main>:"

三、动态调试(GDB 实战)

1. 编译时保留调试信息

gcc -g -no-pie -fno-stack-protector test.c

2. 启动 GDB

gdb ./a.out

3. 基本反汇编调试命令

disassemble main
layout asm
layout regs
break main
run
stepi        # 单步(汇编级)
nexti
info registers
x/10i $pc

4. 查看内存

x/16xw $rsp
x/s 0x4005b0

5. 修改执行流程

set $rip=0x400560
set var=1

四、无符号 / stripped 程序

1. 识别入口

readelf -h ./a.out
# Entry point address
break *0x400500
run

2. radare2 更友好

r2 ./a.out
aa
s main
pdf

五、系统级调试技巧

1. 系统调用跟踪

strace ./a.out

2. 库函数跟踪

ltrace ./a.out

3. 子进程调试

gdb -p <pid>

或:

set follow-fork-mode child

六、典型调试思路(推荐流程)

  1. file / readelf 确认架构
  2. objdump 看整体逻辑
  3. gdb 下断点(main / 入口)
  4. 单步 stepi 观察寄存器变化
  5. 配合 strace 看外部行为
  6. 必要时 patch / 改寄存器验证逻辑

七、常见坑

  • PIE 程序:地址随机化,断点用 *地址 或 break main
  • 优化级别高:汇编难读,建议 -O0
  • 内联汇编:直接用 GDB 看最稳

如果你有具体场景(比如:

  • CTF 逆向
  • 漏洞调试
  • 驱动 / 内核
  • 某个报错程序)

可以直接贴代码或现象,我可以一步步带你调。

0 踩