汇编(三):DEBUG_汇编debug-程序员宅基地

技术标签: 汇编  debug  windows  

前言

为熟练使用 DEBUG 功能,特展开此次实验,实验内容主要为查看 CPU 和内存,用机器指令和汇编指令编程;
 

什么是 DEBUG?

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

DEBUG 功能

R 命令查看、改变 CPU 寄存器的内容;
D 命令查看内存中的内容;
E 命令改写内存中的内容;
U 命令将内存中的机器指令翻译成汇编指令;
T 命令执行一条机器指令;
A 命令以汇编指令的格式在内存中写入一条机器指令。
 

安装 DEBUG

建议使用 Windows 虚拟机进行实验,最好不要在真机上实验,万一整崩了就麻烦了

现在大多数人的电脑是64位系统,而64位系统已经不再支持命令行模式下进入 debug。那64位系统用户怎样才能进入 debug 模式呢?

下载安装DOSBox和debug.exe:

  1. 通过点击面的链接可以下载 DOSBox 和 debug.exe, 下载地址(密码:6b36)

  2. 安装 DOSBox,其默认安装在 C:\Program Files (x86) 目录下;

  3. 找到 debug.exe,并把你喜欢的位置上,记住目录(等会用到)这里我放在 C:\Windows\system 目录下

完成以上安装之后,我们需要给 DOSBox 配置一个指向 debug.exe 所在目录的虚拟的盘符:

mount c C:\Windows\system

其中,C 是虚拟的盘符,可随意设置,后面跟着的是 debug.exe 所在的目录。需要注意的是,此时这个 C 盘是 mount 命令后 DOSBox 中创建的 C 盘,它映射着我们本地的 C:\Windows\system 目录,但并不是我们电脑本地的 C 盘。

上述一切顺利将会出现如下画面:

修改 DOSBox 配置文件

现在是可以正常进入 debug 模式了,但有一个问题,每次打开 DOSBox 都需要重新输入上面的命令,非常不方便。

其实,DOSBox 的配置文件中有一个 [autoexec] 区段,在这个区段中的命令会在 DOSBox 每一次启动时自动运行,我们可以在这里输入我们的 mount 命令。

  • 在 DOSBos 安装根目录下,有一个名为 DOSBox 0.74 Options.bat 的脚本文件,双击便会自动跳转配置文件了;

  • 打开后,拉到最下面,可以看到 [autoexec] 区段,在这里输入刚才的命令;

  • 保存后重启 DOSBox 就可以直接输入 debug,进入 debug 模式了。

安装完成并且能成功运行之后可别忘了拍摄快照喔~

 

R命令

注意 CS 和 IP 的值,CS=073FIP=0100,也就是说,内存 073F:0100 处的指令为 CPU 当前要读取、执行的指令。在所有寄存器的下方,Debug 还列出了 CS:IP 所指向的内存单元处所存放的机器码,并将它翻译为汇编指令。可以看到,CS:IP 所指向的内存单元为 073F:0100,此处存放的机器码为 0000,对应的汇编指令为 ADD [BX+SI],AL

还可以用 R 命令来改变寄存器中的内容:

修改其他寄存器中的值也是同理的;
 

D命令

用 Debug 的 D 命令,可以查看内存中的内容,D 命令的格式较多,这里只介绍在本次实验中用到的格式。

如果我们想知道内存 10000H 处的内容,可以用 “d 段地址:偏移地址” 的格式来查看,

  • 要查看内存10000H处的内容,首先将这个地址表示为 段地址:偏移地址 的格式,可以是1000:0,然后用 d 1000:0 列出1000:0处的内容。

  • 使用 “d 段地址:偏移地址” 的格式,Debug 将列出从指定内存单元开始的128个内存单元的内容。

  • 使用 D 命令,DEBUG 将输出3部分内容:

    • 中间是从指定地址开始的128个内存单元的内容,用十六进制的格式输出,每行的输出从16的整数倍的地址开始,最多输出16个单元内容;
    • 左边是每行的起始地址;
    • 右边是每个内存单元中的数据对应的可显示的 ASCII 码字符;

在使用 “d段地址:偏移地址” 之后,接着使用 D 命令,可列出后续的内容,如图:


也可以指定 D 命令的查看范围,此时采用 “d段地址:起始偏移地址 结尾偏移地址” 的格式。比如要看1000:0~1000:9 中的内容,可以用 d 1000:0 9 实现,如图:
 

E命令

可以使用 E 命令来改写内存中的内容,比如,要将内存 1000:0~1000:9 单元中的内容分别写为0、1、2、3、4、5、6、7、8、9,可以用 “e起始地址 数据 数据 数据……” 的格式来进行,如图所示:

可以用 E 命令以提问的方式来逐个地修改从某一地址开始的内存单元中的内容,步骤如下:

  • 输入 e 1000:0,按 Enter 键。

  • Debug 显示起始地址1000:0010,和第一单元(即1000:0010单元)的原始内容:00,然后光标停在 . 的后面提示输入想要写入的数据,此时可以有两个选择:

    • 其一,为输入数据(我们输入的是 AA),然后按空格键,即用输入的数据改写当前的内存单元;
    • 其二,为不输入数据,直接按空格键,则不对当前内存单元进行改写;
  • 当前单元处理完成后(不论是改写或没有改写,只要按了空格键,就表示处理完成),Debug 将接着显示下一个内存单元的原始内容,并提示进行修改;

  • 所有希望改写的内存单元改写完毕后,按 Enter 键,E命令操作结束。


当然,也可以用 E 命令写入字符以及字符串,字符用单引号包裹,字符串用双引号;
 

U命令

跟上述操作类似,U 命令是用来查看内存中机器码的含义的;


使用 E 命令向内存中写入机器码:

这三条汇编指令及其机器码其实都在之前有提到过得;
 

T命令

就是执行内存中的机器码,注意 CS:IP 的指向就好了,这里就放别人的图了,


首先用 E 命令向从 1000:0 开始的内存单元中写入了8个字节的机器码;然后用 R 命令查看 CPU 中寄存器的状态,可以看到,CS=0b39HIP=0100H,指向内存 0b39:0100;若要用 T 命令控制 CPU 执行我们写到1000:0的指令,必须先让 CS:IP 指向1000:0;接着用 R 命令修改 CS、IP 中的内容,使 CS:IP 指向 1000:0。

完成上面的步骤后,就可以使用 T 命令来执行我们写入的指令了(此时,CS:IP 指向我们的指令所在的内存单元)。执行 T 命令后,CPU 执行 CS:IP 指向的指令,则1000:0 处的指令 b8 01 00(mov ax,0001) 得到执行,指令执行后,Debug 显示输出 CPU 中寄存器的状态。

注意,指令执行后,AX 中的内容被改写为1,IP 改变为 IP+3 (因为 mov ax,0001 的指令长度为3个字节),CS:IP 指向下一条指令。
 

A命令

A 命令主要的作用是以汇编指令的形式在内存中写入机器指令;


首先用A命令,以汇编语言向从1000:0开始的内存单元中写入了几条指令,然后用 D 命令查看 A 命令的执行结果。可以看到,在使用 A 命令写入指令时,我们输入的是汇编指令,Debug 将这些汇编指令翻译为对应的机器指令,将它们的机器码写入内存。

使用 A 命令写入汇编指令时,在给出的起始地址后直接按 Enter 键表示操作结束。
 

后记

实践是检验真理性的唯一标准!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46263782/article/details/120327753

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签