汇编语言调试技巧:Debug 工具与逆向分析基础
DEBUG.exe 基础
DOS 自带的调试工具,支持单步执行、寄存器查看、内存修改。
启动
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 |
单步调试示例
-debug hello.exe
-r ; 查看寄存器
-t ; 执行一条指令
-r ax ; 查看 AX 变化
-d ds:0000 ; 查看数据段
-q ; 退出
Turbo Debugger (TD)
图形化调试器,支持:
GDB 调试(32 位 Linux)
nasm -f elf32 prog.asm -o prog.o
ld -m elf_i386 prog.o -o prog
gdb ./prog
GDB 命令:
(gdb) break main
(gdb) run
(gdb) info registers
(gdb) stepi
(gdb) x/10xw $esp
逆向分析基础
静态分析
1. 使用 objdump 或 IDA 查看反汇编
2. 识别函数边界(PUSH BP / MOV BP,SP ... POP BP / RET)
3. 追踪数据流
动态分析
1. 设置断点
2. 观察寄存器变化
3. 修改内存测试边界条件
常见调试技巧
| 问题 | 调试方法 |
|:--|:--|
| 程序崩溃 | 检查栈平衡(PUSH/POP 是否配对)|
| 结果错误 | 单步执行,逐条检查寄存器 |
| 死循环 | 检查 CX 是否正确递减 |
| 内存越界 | 检查 DS/ES 段地址 |
总结
调试是汇编开发的必备技能。掌握 DEBUG/GDB,你就能定位任何底层 Bug。
下一篇:《汇编在现代系统中的位置:从 Bootloader 到逆向工程》
原文链接:https://wenyiblog.top/2026/06/asm-19-debugging/
首发于文艺技术笔记(wenyiblog.top),转载请注明出处。

浙公网安备 33010602011771号