DEBUG.exe 基础
DOS 自带的调试工具,支持单步执行、寄存器查看、内存修改。
启动
常用命令
| 命令 | 功能 | 示例 |
|---|
| 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
|
逆向分析基础
静态分析
- 使用
objdump 或 IDA 查看反汇编 - 识别函数边界(PUSH BP / MOV BP,SP … POP BP / RET)
- 追踪数据流
动态分析
- 设置断点
- 观察寄存器变化
- 修改内存测试边界条件
常见调试技巧
| 问题 | 调试方法 |
|---|
| 程序崩溃 | 检查栈平衡(PUSH/POP 是否配对) |
| 结果错误 | 单步执行,逐条检查寄存器 |
| 死循环 | 检查 CX 是否正确递减 |
| 内存越界 | 检查 DS/ES 段地址 |
总结
调试是汇编开发的必备技能。掌握 DEBUG/GDB,你就能定位任何底层 Bug。
下一篇:《汇编在现代系统中的位置:从 Bootloader 到逆向工程》