Debug的基本使用()

 更新时间:2023年08月01日 19:19:35   投稿:mdxy-dxy  
Debug是一个通过操作系统(os)对cpu寄存器进行访问用于学习汇编的程序,但是如今的win10(64位)已经不支持cmd打开debug,但是我们可以通过DOSBOX模拟器对其进行访问

Debug是一个通过操作系统(os)对cpu寄存器进行访问用于学习汇编的程序,但是如今的win10(64位)已经不支持cmd打开debug,但是我们可以通过DOSBOX模拟器对其进行访问。

  安装方法:先在https://www.dosbox.com中下载dosbox(默认路径在C:\Program Files (x86)),接下来在网上下载debug.exe,为了方便可以直接在D盘下创一个Debug文件夹放到里边即可。接下来修改一下DOSBox 0.74-3 Options.bat里的路径,把最后的路径挂到

MOUNT C D:\DebugC:debug

中即可打开Dosbox。

debug 的基本用法

debug 基本指令指令全称用法用途
----------?显示debug的命令列表
AassembleA [ address ]将输入源程序的指令汇编成目标代码并从指定的地址单元开始存放。若省缺起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要用于小段程序的汇编或对目标程序的修改
CcompareC range address比较内存的两个部分
DdumpD [ range ]显示部分内存的内容
EenterE address [ list ]从指定地址开始,将数据输入
FfillF range list使用指定值填充一段内存
GgoG [ = address ] [ addresses ]运行在内存中的可执行文件
HhexH value1 value2执行十六进制运算
IinputI port显示来自特定端口的 1 字节值
LloadL [ address ] [driver ] [ firstsector ] [ number ]将文件或磁盘扇区内容加载到内存
MmoveM range address复制内存块中的内容
NnameN [ pathname ] [ arglist ]指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数
OoutputO port byte向输出端口发送 1 个字节的值
PproceedP [ =address ] [ number ]执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪
QquitQ退出 debug会话,不保存当前测试文件
RregisterR [ register ]若给出寄存器名,则显示该寄存器的内存并可进行修改。缺省寄存器名,则显示所有寄存器的内容及当前值( 不能修改 )
SsearchS range list在部分内存中搜索一个或多个字节值的模式
TtraceT [ =address] [ value ]执行一条指令,然后显示所有寄存器的内容、所有标志的状态和Debug下一步要执行的指令的解码形式
UunassembleU [ range ]反汇编字节并显示相应的原语句
WwriteW [address ] [ drive ] [ firstsector ] [ number ]将测试文件写入磁盘
XAallocate expanded memoryXA [ # pages ]分配扩展内存
XDdeallocate expanded memoryXD [ handle ]释放扩展内存
XMmap expanded memory pagesXM [ Lpage ] [ Ppage ] [ handle ]映射扩展内存页
XSdisplay expanded memory statusXS显示扩展内存的状态

以上便是debug的简介。

学习汇编语言并且调用debug调试的时候,主要使用到 -L -U -D -G -T -P 指令

-L 装入 -G 运行 -U 反汇编 -T 单步(可以进入子程序) -P 单步(不进入子程序)-D 查询内存

汇编语言程序建立步骤:

  1. edit 建立源文件 格式:edit xxx.asm ( 必须以 asm 为扩展文件名,否则不能使用 masm 调用 ),生成 obj 文件。
  2. masm 生成链接文件 格式:masm xxx.asm 然后生成 obj 文件,obj 文件是可连接文件,接下来需要使用link链接文件生成exe
  3. link 生成 exe 文件 格式:link xxx.obj 生成 exe 可执行文件

接下来我们进行一些基本的操作

  -r 命令查看,改变cpu寄存器内容

  -d 查看内存中的内容

  -e 命令改写内存中的内容

  -u 将机器指令翻译为汇编指令

  -t 执行下一条指令

  -a  以汇编指令方式写入一条机器指令

首先介绍一下基本内容,看下初始配置:

  看这些寄存器的名称应该都是8086的寄存器名称2333

  在电脑(CISC)的cpu指令由pc(cs段地址和ip偏移地址往地址总线传输地址)控制,因此我们可以修改cs和ip值对pc进行操作。

  CS:代码段寄存器i  ES:额外的寄存器

  DS:数据段寄存器  (A-D)X:普通寄存器

  SS:堆栈段寄存器  SP:堆栈寄存器

  BP:基址寄存器   DI:变址寄存器

  SI:源址寄存器

  

  修改cs,ip地址(-r cs||ip),dosbox里默认是2个字节16位,即4个十六进制表示:

  

  执行下一条指令(-t),可发现ip+=3,占了三个字节,在-d查看一下内存:

  

  下面我们随意用-a来操作一下(输入命令):

         

  

  然后修改cs:ip往下执行......:

  

  按quit即可退出,以上就是debug的基本汇编操作用法,观看愉快!!!

相关文章

  • asm基础——汇编指令之in/out指令

    asm基础——汇编指令之in/out指令

    这篇文章主要介绍了asm基础——汇编指令之in/out指令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言指令集之条件转移指令实现

    汇编语言指令集之条件转移指令实现

    这篇文章主要介绍了汇编语言指令集之条件转移指令实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言学习手把手的Debug教程

    汇编语言学习手把手的Debug教程

    这篇文章主要为大家分介绍了汇编语言学习的Debug教程内容,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • 详解如何在Mac上用汇编语言写HelloWorld

    详解如何在Mac上用汇编语言写HelloWorld

    这篇文章主要介绍了详解如何在Mac上用汇编语言写HelloWorld,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言教程文件后缀大小写S区别分析详解

    汇编语言教程文件后缀大小写S区别分析详解

    这篇文章主要为大家介绍了汇编文件后缀.s与.S区别分析详解,文中详细的讲解了大写的S与小写的s后缀在汇编语言中的作用区别,有需要的朋友可以借鉴参考下
    2021-11-11
  • 汇编语言系列之汇编实现各种码制的转换(思路详解)

    汇编语言系列之汇编实现各种码制的转换(思路详解)

    本文列出了十六进制转二进制、十进制、ASCII码及大小写字母转换的代码,对汇编语言系列之实现各种码制的转换问题感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • 汇编语言入门教程(这一篇足矣)

    汇编语言入门教程(这一篇足矣)

    汇编语言是一种最低级、最古老、不具有移植性的编程语言,它能够直接访问计算机硬件,所以执行效率极高,占用资源极少,想学习汇编语言的朋友不妨阅读下本教程
    2020-01-01
  • iOS汇编入门教程之ARM64汇编基础教程

    iOS汇编入门教程之ARM64汇编基础教程

    这篇文章主要介绍了iOS汇编入门教程之ARM64汇编基础教程,本文通过例子给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 使用汇编语言编写一条简单的贪吃蛇的实现

    使用汇编语言编写一条简单的贪吃蛇的实现

    这篇文章主要介绍了使用汇编语言编写一条简单的贪吃蛇的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言软件延时1s的实现方法

    汇编语言软件延时1s的实现方法

    这篇文章主要介绍了汇编语言软件延时1s的实现方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01

最新评论