IA-32 Debug寄存器

Intel 64与IA-32架构开发权威指南 Intel 64与IA-32架构是现代计算系统中最广泛使用的处理器架构之一,其设计融合了复杂指令集(CISC)与精简指令集(RISC)的优点,支持从嵌入式设备到高性能服务器的广泛应用场景。IA-32(即32位x86架构)起源于1985年的Intel 80386处理器,随后逐步发展出支持多任务、虚拟内存、保护模式等关键特性。而Intel 64(也称x86-64或EM64T)则在2004年引入,将地址空间扩展至64位,支持更大的内存容量和更宽的数据通路。该架构的一个核心设计原则是向后兼容性。 阅读详情
下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结。
希望能给你带去有用的信息。

(DRx对应任意的一个调试寄存器。LENn对应任意一个长度。Ln对应任意一个局部置位)

DR0-DR7可以直接被读写操作(MOV 指令之类的,DRx可以是源操作数也可以是目的操作数)

   但是,DRx的访问是需要一定权限的。比如你用MOV操作的话,你需要在实地址模式,系统管理模式(smm)或者在保护模式(CPL设0).如果权限不够,将会在访问DRx的时候尝产生#GP(general-protection)异常

现在来看看DRx可以干些什么?

1.设置发生断点的地址(线性地址)
2.设置断点的长度(1,2,4个字节,但是执行断点只能是1)
3.设置在调试异常产生的地址执行的操作
4.设置断点是否可用
5.在调试异常产生时,调试条件是否是可用

(以上直接翻译自"Intel 64 and IA-32 Architectures Software Developer’s Manual" volume 3。
以下来自个人的总结。当然,也是参考intel官方资料得来的)

我们来看看调试寄存器的一些细节信息。
下图很重要,后面的介绍都是针对这个图说的。
(当然不是我画的,是来自intel  ia-32系统结构开发手册18章2节)。

点击图片以查看大图

图片名称:	DR0_DR7.jpg
查看次数:	2170
文件大小:	63.6 KB
文件 ID :	39226

调试寄存器 DR0-DR3
   这四个寄存器是用来设置 断点地址的。断点的比对在物理地址转换前(异常产生时,还没有将线性地址转换成物理地址)。由于只有0-3四个保存地址的寄存器,所以,硬件断点,在物理上最多只能有4个。
调试寄存器DR4-DR5
   这两个调试寄存器有CR4的DE标记控制。如果DE置位,那么对这两个寄存器的访问会导致#UD异常。如果DE置0,那么他们就被化名为DR6-DR7(你一定会问原来的DR6-DR7怎么办?这个…… 我也不知道。如果你搞明白了,一定记得告诉我)
调试寄存器DR7(控制寄存器)
   (先介绍DR7对DR6的理解有好处。)

DR7是调试控制寄存器。控制方式嘛!继续看:
1.  L0-L3(由第0,2,4,6位控制):对应DR0-DR3,设置断点作用范围,如果被置位,那么将只对当前任务有效。每次异常后,Lx都被清零。
2.  G0-G3(由第1,3,5,7位控制):对应DR0-DR3,如果置位,那么所有的任务都有效。每次异常后不会被清零。以确保对所有任务有效。但是,不知道为什么,我在测试时:
设置Gn后,不能返回调试异常给调试器(如果你知道为什么,记得告诉我)
3.  LE,GE(由第8,9位控制):这个在P6以下系列CPU上不被支持,在升级版的系列里面:如果被置位,那么cpu将会追踪精确的数据断点。LE是局部的,GE是全局的。(到底什么算精确的,我也不清楚,但是,我知道如果设置了这两个,cpu的速度会降低。我在测试中,都没有置位。)
4.  GD(由第13位控制):如果置位,追踪下一条指令是否会访问调试寄存器。如果是,产生异常。在下面的DR6里面,你会知道他还和另外一个标志位有点关系。
5.  R/W0-R/W3:(由第16,17,20,21,24,25,28,29位控制):这个东西的处理有两种情况。
如果CR4的DE被置位,那么,他们按照下面的规则处理问题:
00:执行断点
01:数据写入断点
10:I/0读写断点
11:读写断点,读取指令不算
如果DE置0,那么问题会这样处理:
00:执行断点
01:数据写入断点
10:未定义
11:数据读写断点,读取指令不算
6.  LEN0-LEN3:(由第18.19.22.23.26.27.30位控制):指定内存操作的大小。
00:1字节(执行断点只能是1字节长)
01:2字节
10:未定义或者是8字节(和cpu的系列有关系)
11:4字节
调试寄存器DR6(调试状态寄存器)
   这个寄存器主要是在调试异常产生后,报告产生调试异常的相关信息
1.  B0-B3(DR0-DR3):DRx指定的断点在满足DR7指定的条件下,产生异常。那么Bx就置位。但是,有时,即使Ln和Gn置0,也可能产生Bx被置位。这种现象可能这样出现(提示:在p6系列处理器,REP MOVS在不断循环中产生的调试异常需要执行完了才能准确返回给调试进程):DR0的L0,G0都置0(DR0就是一个不能产生异常的断点了),然后在DR0指定的地址是一个REP指令的循环,这样,DR0就可能在这个循环之后的REP指令产生的调试异常中将B0置位
2.  BD:BD需要DR7的GD置位,才有效。BD是在下一条指令要访问到某一个调试寄存器的时候,被置位的。
3.  BS:单步执行模式时,被置位。单步执行是最高权限的调试异常。
4.  BT:在任务切换的时候,被置位。但是必须在被切换去的任务的TSS段里面的T标记被置位的情况下才有效。在控制权被切换过去后,在执行指令前,返回调试异常。但是,需要注意,如果调试程序是一个任务,那么T标记的设置肯定就冲突了。然后,导致了死循环(BT的这些信息都是按照官方资料翻译而来,由于没有实际的操作,肯定会有理解上的出入。如果要深入的话,建议看官方资料)
 
有些调试异常会将B0-B3清零。但是其他的DR6的位是不能被产生异常的进程清零的。每次调试异常返回后,调试进程都会先将DR6清零,再按照情况设置。以免产生不必要的错误。

对齐问题和64位处理器
对齐问题:
这个问题是来源于LENn的设置,如果设置4字节,那么必须4字节对齐。例如:我们下4字节的断点,那么DRx需要是A0000/A0004/A0008这样的地址上。I/O地址是零扩展的(这个……也许意味着必须完全对齐)。因为,intel在比对地址时:用LENn的值去覆盖DRx里面保存的地址的低位。你可以想到,不对齐会有什么后果了吧。注意:执行断点只能是1字节。

再用图片解释下(当然,图片来自intel官方资料):

点击图片以查看大图

图片名称:	Align1.jpg
查看次数:	2122
文件大小:	68.6 KB
文件 ID :	39224
点击图片以查看大图

图片名称:	Align2.jpg
查看次数:	2103
文件大小:	33.1 KB
文件 ID :	39225

在64位处理器下:
调试寄存器当然也是64位的。在操作过程中,写入,前面32位被置零。读取:只返回后32位。MOV DRx操作,前32位被忽略。
DR6-DR7的高32位被保留。置零。如果置位,会产生#GP异常。8字节的读写断点完全被支持。

最后,还是给个图片(64位处理器的布局):

点击图片以查看大图

图片名称:	64.jpg
查看次数:	2106
文件大小:	41.9 KB
文件 ID :	39223

最后需要提醒一个小问题:数据写入断点设置后。是在原数据被修改后,才产生调试异常。所以,返回异常时,原有数据已经被修改。如果想保留原有数据,需要自己提前保存对应地址的数据。

如果想看我的测试程序,在我发的 调试引擎 那个帖子里面的附近里的DBG里面。

如果觉得有问题或有疑问的,Just let me know!
汇编程序调试工具debug32 用记事本或者其他的文字书写方式输入的汇编程序,需要经过编译,链接。该程序是汇编程序编译,链接时需要的工具,32位的调试工具,支持更多的语法编译。是压缩文件,解压后使用。 立即下载

相关推荐

debug32 debug32 debug32

debug debug32 用于调试很有用的,具体用法可以先查看网上的资源,以后整理好了再上传.

drx寄存器!

下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结。希望能给你带去有用的信息。 (DRx对应任意的一个调试寄存器。LENn对应任意一个长度。Ln对应任意一个局部置位) DR0-DR7可以直接被读写操作(MOV 指令之类的,DRx可以是源操作数也可以是目的操作数) 但是,DRx的访问是需要一定权限的。比如你用MOV操作的话,你需要在实地址模式,系统管理模式(smm)或者在保护模式(CPL设0).如果权限不够,将会在访问DRx的

Sunny_wwc的专栏 1740

64位win7专用Debug

xp和32位的win7下都自带有debug,64位win7却没了。故上传一个,是DosBox和debug32的打包。

简单的debug32的基本语法介绍(基于dos环境)

1.打开文件: debug 文件名.exe 2.-r 简单的输入-r时就是查看当前各项寄存器的值,并由当前的地址,存储的指令等等。 并且,我们可以用-r命令来对寄存器的值进行修改,如:-r ax。 3.-a -a指令可以让我们依次对内存单元直接写入汇编语言,如: -a 1000:0 1000:0 mov ax,0 1000:3 mov ax,1 4.-d 我们可以用-d命令来查看内存中的内容,和-...

Air_cat的博客 2871

Oracle19c安装,基本配置教程(超详细)

安装有出错的风险,卸载也是比较麻烦的,所以先提前设置一个还原点,在windows中的步骤如下,如果对自己有信心,可以直接跳过该部分开始安装oracle在设置中进入创建还原点的界面开始创建还原点上面已经成功创建了还原点,如果安装oracle时出现问题,自己也无法解决,恢复到安装之前即可,恢复步骤如下经过上面的步骤,Oracle我们就能够正常使用了,我们就使用自己在sql plus里面创建的账号即可,创建的表会默认存放在我们自己创建的表空间里面。

秃头披风侠的博客 7万+

从USB 2.0到USB 3.x:Synopsys SVT USB VIP配置避坑与接口选择指南

本文详细解析了从USB 2.0到USB 3.x的Synopsys SVT USB VIP配置要点,涵盖协议版本选择、物理接口匹配及UVM层次化架构实现。重点介绍了layering sequence的配置技巧和常见问题解决方案,帮助验证工程师高效避坑并优化验证流程。

weixin_42653691的博客 239

1.2 debug的六种指令的使用,四个通用寄存器

首先进入环境我们用到的Debug功能:首先输入debug进入debug模式。

2203_75300307的博客 1705

腾讯云运维工程师认证TCA--真题(最新2022.11)

解析:云原生应用的12要素,1.基准代码:一份基准代码,多份部署;解析:腾讯云主账号具备对其名下资源(包括存储桶)的最大权限,您虽然可以在存储桶策略中限制几乎所有操作,但主账号始终具备 PUT Bucket Policy 操作的权限,主账号调用该操作不检查存储桶策略。解析:瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。解答:云原生五大关键技术:微服务、容器化、DevOps、持续交付。

e1210101的博客 9915

浮点数的反汇编

今天来学学浮点数的反汇编吧. 因为这几天电信宽带到期了, 暂时不想联网, 所以对于浮点数这里, 我没有查什么资料, 关于浮点数原理方面的,我也没做过多的阐述, 有兴趣的可以去看看特定的CPU手册,应该都差不多了,80X86模式的. 或者也可以看看汇编的书籍,都会有介绍的, 今次我们的目的是为了在反汇编一个用到了浮点数的程序时不至于理解不了其中的指令. 浮点数分为单精度和双精度, 单精度的C关键

aitvkx的专栏 1621

飞塔防火墙和paloalto防火墙构建ipsec

一、配置fortigate防火墙1.防火墙配置上网功能1.1配置fortigate的wan1接口IP为100.100.100.2/24VLAN交换internal,IP地址为192.168.156.99/24。开启DHCP分配IP地址范围为192.168.156.110-192.168.156.2101.2配置访问互联网的缺省路由1.3配置访问互联网的安全策略2.配置与Paloalto防火墙的IPSECVPN。

weixin_44675999的博客 3740

MiniMax H3本地部署与ComfyUI集成实战:从环境配置到提示词优化

文本到视频生成是AI内容创作领域的关键技术,它基于扩散模型等深度学习原理,将自然语言描述转化为连贯的动态视觉序列。这项技术的核心价值在于大幅降低了视频制作的门槛,为短视频创作、概念可视化、教育内容生成等场景提供了高效工具。在实际工程实践中,成功部署和运行此类模型,如近期备受关注的MiniMax H3,需要精准处理环境配置、显存优化和提示词工程等环节。其中,解决“CUDA error: no kernel image is available”等版本兼容性问题,以及针对“8G显存”等有限资源进行参数调优,是确

weixin_33674976的博客 479

IA32寄存器与x86-64寄存器的区别

转自:https://blog.youkuaiyun.com/qq_15514565/article/details/57644132 IA32寄存器 一个IA32CPU包含一组8个存储32位值的通用寄存器,这些寄存器用来存储整数数据和指针: 31-0 15-0 15-8 7-0 使用惯例 %eax %ax %ah %al 调用者保存 %ecx ...

云守护的专栏 1012

【四足机器人项目实战】四足机器人弹簧倒立摆(SLIP)动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1.动力学建模构型方法2.四足机器人动力学模型(1)多体动力学模型【针对躯干+脚建模】方法一:VMC(VirtualModelController)模型方法二:SLIP模型(2)浮基单体动力学模型【针对躯干建模】【用于MPC】 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简

qq_35635374的博客 7313

IA32寄存器

IA32寄存器IA32作为80x86系列中的一员,必须保证向后兼容,也就是说,既要支持16位的处理器,也要支持32位的处理器。在8086中,所有的寄存器都是16位的,下面我们来看一下IA32中寄存器有何变化:把16位的通用寄存器、标志寄存器以及指令指针寄存器扩充为32位的寄存器段寄存器仍然为16位。增加4个32位的控制寄存器增加4个系统地址寄存器增加8个调式寄存器增加2个测试寄存器1、通用寄存器8

hbrqlpf的专栏 5388

Android 12.0 kenel中修改rom系统内部存储的大小

在12.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出相关的修改,来实现功能

安卓兼职framework和app工程师的博客 1678

智算中心建设项目初步设计方案

本项目面向区级政府、智算中心及文旅从业者,聚焦某区智算中心一期建设,响应数字经济与智慧城市建设政策,推动文旅产业升级。遵循统筹规划、数据驱动原则,目标打造智慧文旅样板。建设内容涵盖云网数据底座(以租代建)、数据中台(全生命周期管理)、智慧文旅平台(含“一机游”电商)及气象监测等配套,采用前后端架构与低代码开发,强化三级等保与纵深防御,实现安全可控。方案融合多类资源目录,提供从设计到运营的完整技术支撑,助力区域智算与文旅深度融合。

cdfunlove的博客 111

Intel x86_64 LBR功能

通过CPUID指令读取处理器的各种标识和特性信息,判断是否支持硬件调试功能,rdmsrwrmsr指令是否可用;通过wrmsr指令设置寄存器,开启LBR功能;通过rdmsr指令读取寄存器,获取跳转指令信息;下面我们将对这几个方能进行更加详细的介绍。该指令可以从读取处理器的各种标识和特性信息(比如:CPU型号和支持的功能),并将指令执行完后返回的信息保存在 EAX, EBX, ECX,和 EDX 寄存器中。CPUID指令有两组功能:一组返回的是基本信息,另一组返回的是扩展信息。

chi's blog 944

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IA-32寄存器基本介绍

IA-32寄存器基本介绍 什么是寄存器 寄存器就是CPU内部用来存放数据的一些小型存储区域 特点: 由于距离CPU近,它的读写速度非常快,常用来暂时存储数据 寄存器的种类 Basic program execution registers->基本程序运行寄存器 x87 FPU registers MMX registers XMM registers Control registers->控制寄存器 Memory management registers->内存管理寄存器 Debug re

learn112的博客 1909

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《逆向工程核心原理》读书笔记——第4章 IA-32寄存器基本讲解

第4章 IA-32寄存器基本讲解4.IA-32寄存器1.通用寄存器2.段寄存器3.程序状态与控制寄存器4.指令指针寄存器 4.IA-32寄存器   IA-32是英特尔推出的32位元架构,属于复杂的指令集架构,并且支持多种寄存器。下面列出了IA-32支持的寄存器类型。   以上寄存器列表中,我们先要学习基本程序运行寄存器的相关内容,这是程序调试中最常见的寄存器,是学习程序调试初级技术必须掌握的内容。后面学习中、高级程序调试技术时,我们将继续学习有关控制寄存器(Control registers )、内存管理

Onlyone_1314的博客 1306

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IA32 architecture 学习笔记 (一)

IA32支持最基本的三个操作模式 (modes of operations): 1)Real-Address Mode (当 CPU 启动或者重启,CPU就处于real-address mode.) 2)Protected Mode 3) System management mode (SMM) 操作模式决定哪些指令和哪些体系结构的特性可以被使用。 基本执行

happylong123hehe的专栏 2623

Intel® IA-32 Architecture Learning 1

Author: Harold Wang http://blog.youkuaiyun.com/hero7935 Overview: Operation Mode Typical Computer Systems Registers/Resources Operation Mode: Real Mode Intel® 8086 processor mode with a few extension that only 20 bit address memory is ceessible(1M

Harold Wang Column 2375

Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述

Basic Execution Environment Overview IA-32处理器提供了一套完整的资源,在处理器上运行的程序/任务可以执行指令,存储代码,数据以及状态信息。这些资源(如下简要的列表和示意图)构成了IA-32处理器的基本执行环境。 Intel 64处理器除了支持IA-32处理器的基本执行环境,在IA-32e模式下还支持一个类似的环境可以执行64位程序(64位子模式)与32...

一凡stkeke 1514
上一篇: 内存地址转换与分段
下一篇: X86寄存器详解
ctrloep
博客等级 码龄19年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值