首页 > 其他分享 >二、DEBUG模式及常用指令

二、DEBUG模式及常用指令

时间:2024-10-30 11:46:50浏览次数:1  
标签:常用 查看 命令 地址 指令 偏移 内存 寄存器 DEBUG

debug概述

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

debug的功能

调试(Debug)的命令比较多,共有20多个,但这6个命令是和汇编学习密切相关的。
在以后的实验中,我们还会用到一个P命令。

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

进入debug模式

image

R命令:查看、改变CPU寄存器的内容

  • 查看CPU寄存器的内容

    输入一个r后回车

    image

  • 改变CPU寄存器的内容

    若要修改一个寄存器中的值,比如AX中的值,可用R命令后加寄存器名来进行,输入“r ax”后回车,将出现“:”作为输入提示,在后面输入要写入的数据后回车,即完成了对 AX中内容的修改。若想看一下修改的结果,可再用R命令查看,如图

    image

D命令:查看内存中的内容

内存中数据的地址由段地址和偏移地址组成,其中段地址乘以16再加上偏移地址就是真实的物理地址

说白了,就是用两个16位数(一个是段地址,另一个是段内偏移),合成一个20位地址

以十进制举例:

假设一本书有99页,如果可以用“2位”十进制数表示,那么第0页就是:00,第14页就是:14.
用2个“1位”十进制数表示那么就只好分段了,由于“1位”十进制数可以表示10页,99页书就分成10段。
则第0页就是:第0段,第0页; 段寄存器为0,段内偏移为0.(即第0段的第0个位置)
第14页就是:第1段,第4页。 段寄存器为1,段内偏移为4.(即第1段的第4个位置)
然后用段寄存器地址和段内偏移地址组成一个“2位”地址。
则第14页物理地址为:段地址“1”左移一位,得到10,再加上段内偏移4,最终得到14.

当前编程环境的寄存器是16位的,所以如果不分段的话是无法存下大于16位的地址的。

段地址和偏移地址都是16进制数,所以段地址需要乘以16(与上面十进制书页的例子一样)再加上偏移地址就是物理地址了

  • 查看指定地址及该地址后的128个字节数据

    查看地址:e291:32f3及后128位字节的数据

    image

  • 查看指定范围的地址(不可跨段)

    查看地址:0000:0002到地址:0000:0004之间的数据

    image

  • 自动地址偏移

    • 只输入一个d命令时,不会查看之前的地址的数据,而是会再原有的基础上往后查看128个字节的数据

      image

    • 注意,如果要跨段的话会回到段首

      image

E命令:改写内存中的内容

  • 第一种修改方式

    e+起始地址+要修改的值(可以连续写多个)

    image

  • 第二种

    e+起始地址

    如图所示,回车后显示的是地址[0000:0000]的值:00,直接输入要修改的值即可。如果还有修改下一个地址的值则按空格。如果要跳过某个字节不修改直接空格即可

    image

A命令:以汇编指令的格式在内存中写入一条机器指令

在地址:[073f:0100]写入汇编指令,连续按两下回车退出

image

T命令:执行一条机器指令

输入一个t命令就回车时,默认执行[CS:IP]地址内的指令

t[起始地址]这种格式可以执行指定地址的指令

每执行一次T命令只会执行一条指令

image

U命令:将内存中的机器指令翻译成汇编指令

将刚刚写入地址[073f:0100]的机器指令翻译成汇编

image

标签:常用,查看,命令,地址,指令,偏移,内存,寄存器,DEBUG
From: https://www.cnblogs.com/liuhousheng/p/18515469

相关文章

  • Linux常用信息收集命令
    查看Linux系统内核信息uname-a查看Linux操作系统版本信息cat/proc/version查看Linux操作系统发行版信息lsb_release-acat/etc/issuecat/etc/redhat-release查看设备型号sudo/usr/sbin/dmidecode-ssystem-product-name查看CPU相关信息CPU数量:cat/pro......
  • 十五、PyTorch常用工具模块
      在训练神经网络过程中,需要用到很多工具,其中最重要的三部分是:数据、可视化和GPU加速。本章主要介绍Pytorch在这几方面的工具模块,合理使用这些工具能够极大地提高编码效率。1.1数据处理  在解决深度学习问题的过程中,往往需要花费大量的精力去处理数据,包括图像、文本、语音......
  • jenkins 常用shell
    1、发布前端shellip="192.168.31.33"port=22#前端打包后的包名dist_name="dist"#app的名字,app下有index.htmlapp_name="dist"#app所在的目录app_dir="/data/project/html/nmg-ibuilds-pc-visitor"#备份个数bak_count=3#备份目录bak_dir="/dat......
  • Linux基本指令(一)
    01ls指令语法:ls[选项][目录或文件]功能:罗列当前目录下的指定文件或目录常见选项-a(显示当前目录下的所有文件) -l(显示文件详情) -d(不进入文件里面)示例:ls-a ls-l ls-a-l(命令中的选项可以传递多个)以“.”开头的为隐藏文件,在加上-a后才可见  文件=......
  • 【APP测试】ADB安装、常用命令、monkey的使用及日志分析
    前言原生和混合在市场上区分原生、混合开发原生:是区分安卓(Andriod)和IOS(C语言)。1.一个app有两套代码,两个不同的岗位去完成的。2.性能会更好、兼容性也会好3.开发成本高、时间慢混合:原生+H5。一般可以实现一套代码生成安卓版本和iOS版......
  • 现在职业PHP 程序员通常用什么编程工具
    标题:现代职业PHP程序员通常使用的编程工具开头段落:现代职业PHP程序员通常使用的编程工具主要包括集成开发环境(IDE)、版本控制系统、调试工具、数据库管理工具、以及代码质量工具。这些工具共同构建了PHP开发的基础框架,使开发工作更加高效、组织化。特别地,集成开发环境(IDE)无疑是......
  • git常用命令
    提交代码:1、先去github创建一个仓库(Repositories),得到这个仓库地址,如:https://github.com/xxxx/htmlDemo.git2、在要上传的文件夹里面打开gitbash,按顺序执行①gitinit②gitremoteaddoriginhttps://github.com/xxxx/htmlDemo.git③gitadd.④gitcommit-m‘备注信......
  • MarkDown All in One插件预览与常用快捷键
    MarkDownAllinOne插件预览与常用快捷键预览实时预览:Ctrl+Shift+P调出主命令框,输入Markdown,应该会匹配到几项Markdown相关命令,选择Markdown:OpenPreviewtotheSide,就能调出实时预览框了。新窗口预览:Ctrl+Shift+V打开新窗口,加载md文件预览。常用快捷键......
  • 运维监控丨16条常用的Kafka看板监控配置与告警规则
    本期我们针对企业运维监控的场景,介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求,灵活调整和扩展这些监控配置及告警规则。在实际应用场景中,需要综合运用多种监控工具(例如Prometheus、Grafana、Zabbix等)和告警机制,以保障Kafka集群的稳定性和可靠性。此外,定期审核并......
  • Linux:vmstat指令
    学习自:Vmstat命令详解-CSDN博客Linux内存之vmstat-CSDN博客1、Linux分页管理概述vmstat(VirtualMemoryStatistics,虚拟内存),用于对OS的虚拟内存、进程、CPU活动进行监控。它是对系统整体情况的分析,无法对某个进程进行深入分析。1)虚拟内存Linux系统内存分为物理内存、虚拟......