汇编语言调试技巧: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. 使用 objdumpIDA 查看反汇编

    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),转载请注明出处。

    posted @ 2026-06-22 19:29  软件工程师文艺  阅读(0)  评论(0)    收藏  举报