04月22, 2019

Debug 的使用

什么是 Debug:

DebugDOS、Windows 都提供的实模式(8086 方式)程序的调试工具。使用它,可以查看 CPU 各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。

Debug 常用的功能:

  • R 命令:查看、改变 CPU 寄存器的内容。

    • 使用 R 命令查看,直接键入 R 就可以。
    • 使用 R 命令来改变寄存器中的内容。
      1. 比如要修改AX寄存器中的值,可用R命令后加寄存器名来进行
      2. 输入r ax,后按 Enter键。
      3. 出现: 提示符,在后面输入要写入的数据后按 Enter 键,即可完成对 AX 中内容的修改。
      4. 修改完成后,可使用 R命令查看。

      

  • D 命令:查看内存中的内容。

    • D命令的格式较多,这里只介绍几种:
    • 使用格式: d 段地址:偏移地址
      • 例:d 1000:0,就可以列出1000:0处内容。
      • Debug 程序将列出从指定内存单元开始的 128 个内存单元的内容。
      • 在使用 d 段地址:偏移地址之后,接着使用 D 命令,可列出后续内存单元中的内容。
    • 使用 D 命令查看指定范围的内容,使用 d 段地址:偏移地址 结尾偏移地址的格式。
      • 例:d 1000:0 9,查看的 1000:0 ~ 1000:9中的内容。

      

  • E 命令:改写内存中的内容。

    • 使用格式: e 起始地址 数据 数据 数据 数据 ······
      • 例:e 1000:0 0 1 2 3 4 5 6 7 8 9,将内存1000:0 ~ 1000:9单元中的内容分别写为 0 1 2 3 4 5 6 7 8 9
    • 可以使用段寄存器来替换 1000。
      • 例:e ds:0 0 1 2 3 4 5 6 7 8 9.
    • 使用提问的方式来逐个地修改从某一地址开始的内存单元中的内容。
      • 1000:10 单元开始为例:
      • 输入 e 1000:10,按 Enter 键
      • debug 显示起始地址 1000:0010,和第一个单元的原始内容。然后光标停在 “.“的后边提示输入想要写入的内容,此时有两个选择:
        1. 输入数据,然后按空格,即用输入的数据改写当前的内存单元;
        2. 不输入数据,直接按空格键,则不对当前内存单元进行改写。
      • 当前单元处理完成后(不论是改写或没有改写,只要按了空格键,就表示处理完成),debug 将接着显示下一个内存单元的原始内容,并提示进行修改。
      • 所有希望改写的内存单元改写完毕后,按 Enter 键,E 命令操作结束。

      

  • U 命令:将内存中的机器指令翻译成汇编指令(查看内存中机器码的含义)。

    • 使用格式:u 1000:0. 可以使用段寄存器来替换 1000。
      • 使用 u命令查看从 1000:0 开始的内存单元中的机器指令和它们所对应的汇编指令。
      • u 1000:0 || u ds:0

      

  • T 命令:执行一条机器指令(执行内存中的机器码)。

    • T命令可以执行一条或多条指令,简单的使用 T命令,可以执行CS:IP指向的指令。

      

  • A 命令:以汇编指令的格式在内存中写入一条机器指令。

    • 我们可以使用 E 命令写入机器指令,这样做很不方便。Debug 提供了 A命令。
    • 使用格式:a 1000:0.
      • A 命令,以汇编语言向 1000:0 开始的内存单元中写入了指令。可以使用段寄存器来替换 1000。
      • 例如:a cs:0
      • 使用A命令写入汇编指令时,在给出的起始地址后直接按 Enter 键表示操作结束。

      

进入 Debug(在 Mac 上进入 debug 程序):

  • 安装 DOS 模拟器。
  • 在模拟器中设置 debug.exe 文件所在目录为挂载点。
  • 进入 debug.exe 文件所在目录(设置挂载点)。
  • 输入 debug,就可以了。

具体流程,请参考这里。

本文链接:http://www.iuutech.com/post/debug_1555895571.html

-- EOF --

Comments