debug的基本用法

时间:2019-06-12
本文章向大家介绍debug的基本用法,主要包括debug的基本用法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.关于debug
debug是dos、windows提供的实模式程序调试工具;
作用:查看cpu各寄存器的内容、内存情况、在机器码级别追踪程序的运行;
命令:
debug
参数:
    r    ->查看、改变cpu寄存器的内容;
    d    ->查看内存中的内容;
    e    ->修改内存中的内容;
    u    ->将内存中的机器指令翻译成汇编指令;
    t    ->执行一条机器指令;
    a    ->以汇编的格式在内存中写入一条机器指令;
2.用r查看、改变cpu寄存器的内容
1)查看cpu寄存器内容
输入命令 debug 进入debug模式
debug
输入参数 r
r
结果:
如上图所示;
可以看到各寄存器对应的值,例如:ax的值为0000、bx的值也是0000;
0740:1000 0000 ;表示cs:ip当前所指向的内存单元地址为0740:1000,该内存单元存放的机器码为0000;对应的汇编指令是 ADD [BX+SI],AL;
2)修改寄存器内容
例如:想要将cs:ip指向1000:0;
需要将cs的值改为1000H,ip的值改为0H;
命令:r 待修改的寄存器,enter键确定
r cs
会显示该寄存器的当前值,在冒号“:”后面输入新值即可,然后enter键确定;
ip修改也一样;
如上图所示:修改完成后输入r查看,cs:ip被修改为1000:0;
3.用d查看内存信息
1)默认查看
命令:
debug
参数:
d
结果:
参数d后面不加 段地址:偏移地址 ,显示默认地址的内存信息;
每次显示128个内存单元的信息;
分为3部分;左边是内存单元的起始地址;中间是每个内存单元的值;右边是内存单元值对于的ASCII码信息,例如46表示F,74表示t;
2)查看特定地址的内存
命令:
debug
参数:d 段地址:偏移地址
d 1000:0
结果:
可以看到,查看的是指定地址的内存信息;
如果再接着输入d,显示后续地址的内存信息,如上图所示,直接输入d显示的是从1000:80开始的内存信息,紧接上一次查询的地址;
3)范围查询
参数:d 段地址:偏移地址 结束偏移地址
d 1000:0 8
结果:
4.用e改写内存中的内容
1)一起修改
参数:e 段地址:偏移地址 内容1 内容2 ...
例如:将1000:0处开始修改内存信息为 123iLoveC++
e 1000:0 1 2 3 'i' "Love" "C++"
2)逐一修改
参数:e 段地址:偏移地址
会从目标地址开始依次显示每一个内存单元的值;
如果需要修改则输入修改的值,空格键确认;不需修改直接按空格键;
修改完成后enter键;
例如:从1000:10处开始修改内存信息为 123i
5.用u翻译内存中的内容为汇编指令
参数:u 段地址:偏移地址
u 2000:0
结果:
可以看到,内存中的机器码被翻译成了汇编指令;
6.用t执行指令
参数:t
如果要执行目标指令,需要将cs:ip执行目标指令的起始地址;
一次只执行一条指令,如需执行下一条指令需再次输入t;
例如:执行2000:0处的指令;
    将cs设为2000;    ->r cs
    将ip设为0;    ->r ip
    执行第一条指令    ->t
    执行第二条指令    ->t
可以看到执行了两条指令;
分别是修改寄存器ax和bx的值;
7.用a以汇编指令的形式修改内存
参数:a 段地址:偏移地址
从目标地址开始将编辑的汇编指令写入内存;
输入汇编指令 enter键确认;
不输入直接按enter键结束编辑;
a 3000:0
结果:
8.用段寄存器作段地址
用debug的d命令查看内存信息时命令为:d 段地址:偏移地址;
例如:d 1000:0 用来查看从1000:0开始的内存信息;
如果想查看段寄存器ds所指向的地址:d ds:偏移地址;
具体操作如图:
段寄存器cs、ss也可以这样用;
    d cs:偏移地址    ->查看代码段的信息;
    d ss:偏移地址    ->查看栈段的信息;
其他命令:E、A、U中也可以使用段寄存器;
例如:编辑数据段命令 
e ds:0

原文地址:https://www.cnblogs.com/ShiningArmor/p/11011306.html