1、什么是Debug?

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

我用的是Mac机器,先下载DOS-BOXmasm5

1)将masm5文件夹放到某个目录下,例如用户目录~下面

2)双击打来DOSBox

3)挂载,输入mount c:  ~/masm5命令,其中~/masm5是第一步中masm5文件夹的实际位置。

4)输入c:

5)输入Debug就可以使用了。

2、Debug的功能

1)用Debug的R命令查看、改变CPU寄存器的内容;

输入r,Enter后能看到寄存器中的值

输入r+空格+寄存器名,Enter后,出现":"作为输入提示,在后面输入要写入的数据,Enter后完成修改

2)用Debug的D命令查看内存中的内容;

输入d+空格+段地址值+":"+偏移地址,Enter后查看内存数据,Debug会列出128个内存单元的内容,如d 1000:9

输入d+空格+段地址值+":"+起始偏移地址+空格+结尾偏移地址,Enter后查看内存数据,Debug会列出对应区域的内存单元的内容,如d 1000:0 9

d+空格+ds+":"+偏移地址

3)用Debug的E命令改写内存中的内容;

"e+空格+起始地址+空格+数据+空格+数据+空格 ..."改写对应内存中的内容

可以用E命令向内存中写入字符,例如用E命令从内存1000:0开始写入数值1、字符a、数值2、字符b、数值3、字符c

-e 1000:0 1 'a' 2 'b' 3 'c'  ,其中-表示光标

"e+空格+ds+":"+偏移地址+空格+数据+空格+数据+空格 ..."  (内存单元地址前可以直接使用ds段寄存器名字,而不再是常数值)

4)用Debug的U命令将内存中的机器指令翻译成汇编指令

U+空格+段地址值+":"+偏移地址, 将对应内存中的机器指令翻译成汇编指令

U+空格+ds+":"+偏移地址

5)用Debug的T命令执行一条机器指令;

注意:int 21指令需要使用P命令执行。

6)用Debug的A命令以汇编指令的格式在内存中写入一条机器指令;

a+空格+段地址值+偏移地址,然后可以在对应的内存中写入汇编指令

a+空格+ds+偏移地址

7)使用Q命令退出Debug

8)g命令用来调试循环里面的代码

g+空格+偏移地址: 使Debug从当前的CS:IP指向的指令执行,一直到(IP)=偏移地址位置。

9)p命令用来将所有的循环一次走完

Debug的使用的更多相关文章

  1. jmeter sampler maven项目排错记

    eclipse 创建的maven项目,引入jar包之后出现红色叹号,一直找不到原因,连main方法都无法运行,提示找不到类: 错误: 找不到或无法加载主类 soapsampler.SoapSample ...

  2. 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL

    在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...

  3. .NET Core的日志[3]:将日志写入Debug窗口

    定义在NuGet包"Microsoft.Extensions.Logging.Debug"中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志 ...

  4. 设置tomcat远程debug

    查看端口占用情况命令: netstat -tunlp |grep 8000 tomcat 启动远程debug: startup.sh 中的最后一行 exec "$PRGDIR"/& ...

  5. Android NDK debug 方法

    最近又频繁遇到 NDK 的错误,记录一下debug调试的一些经验,以备后续查看 一般来说,在Android Studio中的Monitor中将过滤器的 LOG TAG 设置为 "DEBUG& ...

  6. 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理

    Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services.exe -unregserver Windows服务Release版本 注册 Servi ...

  7. struts debug 标签

    < s:debug> 引起下面的错误 org.apache.jasper.JasperException: Caught an exception while getting the pr ...

  8. How to debug .NET Core RC2 app with Visual Studio Code on Windows?

    Simone Chiaretta (http://codeclimber.net.nz/archive/2016/05/20/How-to-debug-NET-Core-RC2-app-with-Vi ...

  9. Debug Databinding Issues in WPF

    DataBinding is one of the most powerful features in WPF. But because it resolves the bindings at run ...

  10. Debug JDK变量显形

    本文面向的朋友 本文主要说明在使用Eclipse Debug JDK时,看不到变量值的解决办法. 如果您看到上面绿色字体表示不敢兴趣,请一定果断back,如果您不爽,请在下面使劲的拍. Debug J ...

随机推荐

  1. 利用官方的vue-cli脚手架来搭建Vue集成开发环境

    在利用vue-cli脚手架搭建vue集成环境之前,我们需要先安装nodejs的环境.如果在cmd中输入node --version和npm --version出现如下的版本信息,就说明安装已经成功了. ...

  2. pytest 单元测试

    pytest简介 pytest 是python的一种单元测试框架,它非常的简洁.清晰. pytest 安装 pip install -U pytest 查看pytest版本 pytest --vers ...

  3. [转载]FMS Dev Guide学习笔记(验证用户)

    一.开发交互式的媒体应用程序 1.使用外部资源验证用户 对于有限数量的客户,请求用户名密码,然后通过外部资源(像数据库.LDAP服务或其它访问授权服务)验证它们,是可行的.     a.SWF在请求连 ...

  4. tkinter绑定鼠标滚轮滚动事件 canvas.bind("<MouseWheel>", processWheel) 失效

    其实,不同系统不一样,我的是Ubuntu 所以是<Button-4>   <Button-5> 见下: 来自:https://stackoverflow.com/questio ...

  5. anchor_generator.proto:11:3: Expected "required", "optio nal", or "repeated"

    转自:https://github.com/tensorflow/models/issues/1834 When I use the commond " protoc object_dete ...

  6. 微信小程序 在canvas画布上划动,页面禁止滑动

    要实现微信小程序 在canvas画布上划动,页面禁止滑动,不仅要设置disable-scroll="true",还要要给canvas绑定一个触摸事件才能生效. <canvas ...

  7. canvas画布内部重复画圆

    <!DOCTYPE html><html><head> <title>canvas example</title> <meta cha ...

  8. php设置头部让任何域名请求

    header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求...

  9. SQL语句中LEFT JOIN、JOIN、INNER JOIN、RIGHT JOIN的区别?

    w3school的一套sql教程: http://www.w3school.com.cn/sql/index.asp left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录.r ...

  10. jquery 滚动条位置的

    $('#fixedHead').width()//div的宽度 $('#fixedHead')[0].scrollWidth//滚动条的宽度 两者的差为滚动条的宽度 var b1=$("#d ...