汇编语言调试技巧:Debug 工具与逆向分析基础

汇编出错不能 print 调试。本文教你使用 DEBUG.exe、Turbo Debugger 和现代逆向工具(GDB/IDA),掌握寄存器查看、断点设置和单步执行。

2

DEBUG.exe 基础

DOS 自带的调试工具,支持单步执行、寄存器查看、内存修改。

启动

1
debug program.exe

常用命令

命令 功能 示例
r 查看/修改寄存器 r ax
d 查看内存 d ds:0100
e 修改内存 e ds:0100 90 90
t 单步执行 t
g 运行到断点 g 0100
u 反汇编 u cs:0100
a 汇编 a cs:0100

单步调试示例

1
2
3
4
5
6
-debug hello.exe
-r          ; 查看寄存器
-t          ; 执行一条指令
-r ax       ; 查看 AX 变化
-d ds:0000  ; 查看数据段
-q          ; 退出

Turbo Debugger (TD)

图形化调试器,支持:

  • 源码/反汇编窗口
  • 断点设置
  • 变量监视
  • 调用栈查看

GDB 调试(32 位 Linux)

1
2
3
nasm -f elf32 prog.asm -o prog.o
ld -m elf_i386 prog.o -o prog
gdb ./prog

GDB 命令:

1
2
3
4
5
(gdb) break main
(gdb) run
(gdb) info registers
(gdb) stepi
(gdb) x/10xw $esp

逆向分析基础

静态分析

  1. 使用 objdumpIDA 查看反汇编
  2. 识别函数边界(PUSH BP / MOV BP,SP … POP BP / RET)
  3. 追踪数据流

动态分析

  1. 设置断点
  2. 观察寄存器变化
  3. 修改内存测试边界条件

常见调试技巧

问题 调试方法
程序崩溃 检查栈平衡(PUSH/POP 是否配对)
结果错误 单步执行,逐条检查寄存器
死循环 检查 CX 是否正确递减
内存越界 检查 DS/ES 段地址

总结

调试是汇编开发的必备技能。掌握 DEBUG/GDB,你就能定位任何底层 Bug。

下一篇:《汇编在现代系统中的位置:从 Bootloader 到逆向工程》

广告
广告位预留中 (728x90)