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
 
 
 

debug的基本用法的更多相关文章

  1. Debug.print的用法

    使用Debug.print可以用来更好的调试VBA程序 通过ALT+F11代开VBA编程窗口) 插入模块,接着在窗口中输入以下代码,按F5执行 Sub Excute() Debug.Print * + ...

  2. 关于debug.keystore文件用法以及错误处理

    在开发过程中需要频繁的为测试的同事签名apk,非常很麻烦,把默认debug.keystore文件替换成发布用(生产环境)的签名文件,不用频繁地签名apk文件了.      如果直接使用生产keysto ...

  3. Debug过程中的mock (及display窗口的使用)

    转载:http://m.blog.csdn.net/blog/u012516903/18004965 在debug的时候,有3个地方可以进行mock测试 测试代码如下: 1.使用display窗口 W ...

  4. perl debug

    1. 进入debug模式 # perl -d ./perl_debugger.pl it prompts, DB<1>   2. 查看从第10行开始的代码. 查看函数get_pattern ...

  5. 手把手教你汇编 Debug

    关于汇编的第一篇文章: 爱了爱了,这篇寄存器讲的有点意思 Hello大家好,我是程序员cxuan!我们上篇文章了解了一下基本的寄存器,这篇文章我们来进行实际操作一下. 原文链接:手把手教你汇编 Deb ...

  6. Linux下Awk详解(转载)

    什么是Awk Awk是一种小巧的编程语言及命令行工具.(其名称得自于它的创始人Alfred Aho.Peter Weinberger 和 Brian Kernighan姓氏的首个字母).它非常适合服务 ...

  7. Force.com微信开发系列(二)用户消息处理

    Force.com是国际知名的云平台公司,成功配置好Force.com作为微信公开号的服务端后,接下来需要的任务是处理用户发送的消息.当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML ...

  8. Python 第五篇(下):系统标准模块(shutil、logging、shelve、configparser、subprocess、xml、yaml、自定义模块)

    目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操 ...

  9. Perl的调试方法

    来源: http://my.oschina.net/alphajay/blog/52172 http://www.cnblogs.com/baiyanhuang/archive/2009/11/09/ ...

随机推荐

  1. 虚拟机(Vmware)安装ubuntu18.04和配置调整(二)

    二.配置修改 1.修改语言环境(settings->Region & Language) 选中中文简体(Chinese(simplified)),点击Apply 中文简体语言安装完成后, ...

  2. vue技术分享之你可能不知道的7个秘密

    本文是vue源码贡献值Chris Fritz在公共场合的一场分享,觉得分享里面有不少东西值得借鉴,虽然有些内容我在工作中也是这么做的,还是把大神的ppt在这里翻译一下,希望给朋友带来一些帮助. 一.善 ...

  3. RHEL8配置本地yum源

    在RHEL8中把软件源分成了两部分一个是BaseOS,一个是AppStream. 在Red Hat Enterprise Linux 8.0中,统一的ISO自动加载BaseOS和AppStream安装 ...

  4. MVC4 日期格式化

    // MVC返回到View的日期一般都会带有0分0秒,比如2014/08/22 在前端显示为2014/08/22 00:00:00,比较不美观 // 如果是想展示数据 用label @Html.Lab ...

  5. 林大妈的CSS知识清单(二)可见格式化模型(内含margin塌陷与浮动闭合的解决方案)

    盒模型.浮动和定位是CSS中最重要的三个概念.它们共同决定了一个元素在页面中以怎样的形式进行排布与显示. 一.盒模型 1. 定义 盒模型是CSS的核心概念.一个页面中,所有的元素(不管他最终显示是圆形 ...

  6. Java--java.util.stream.Collectors文档实例

    // java.util.stream.Collectors 类的主要作用就是辅助进行各类有用的 reduction 操作,例如转变输出为 Collection,把 Stream 元素进行归组. pu ...

  7. PostgreSQL 初学常用实用命令

    常用命令 psql -h ip -p port -U user -d dbName 数据库 \dt(当前数据库所有表) \l(所有数据库) \c(切换数据库) \d 表名(查看表结构) table \ ...

  8. im_master_search_specification

    中文 http://accel-archives.intra-mart.jp/2014-winter/document/iap/public_zh_CN/im_master/im_master_sea ...

  9. mysql float 精度丢失

    mysql 中保存了字段 float s=0.3 直接执行sql 查出来是 0.3 但是JPA 执行查询结果是 0.2999 换成decimal 就可以

  10. TVM设备添加以及代码生成

    因为要添加的设备是一种类似于GPU的加速卡,TVM中提供了对GPU编译器的各种支持,有openCl,OpenGL和CUDA等,这里我们选取比较熟悉的CUDA进行模仿生成.从总体上来看,TVM是一个多层 ...