调试寄存器


调试寄存器

DRO~ DR7是调试寄存器. DRO ~ DR3 用于保存断点的线性地址. DR7 - 分别保存4个断点的中断条件. DR6 - 保存断点命中后的信息.

控制寄存器

1566888347411

CR0

包含处理器的大量控制标志位. 下面列出常用的三种:

  • PE - 是否启用保护模式,置1则启用

  • PG - 是否使用分页模式, 置1则开启分页模式, 此标志置1时,PE标志也必须置1,否则CPU报异常.

  • WP - WP==1时, 不能修改只读的内存页 , WP==0 时, 可以修改只读的内存页.

CR1

保留

CR2

专门用于保存缺页异常时的线性地址.

CR3

专门用于保存一个进程的页目录地址(此寄存器存储的是物理地址)

此寄存器的低12位一般都设置为0 , 因为CR3寄存器所保存的地址是一个页目录的地址,该地址必须在一个以分页粒度对其的地址上.

  1. 在使用非PAE模式下的分页结构时, 指向PDT基地址,线性地址是10-10-12格式

  2. 使用PAE模式的分页结构时, 指向 PDPT基地址,线性地址是2-9-9-12格式

CR4

提供了一些扩展的控制功能.

  • PAE - PAE==1 表示使用物理地址扩展模式 , PAE==0 表示不使用物理地址扩展模式.

GDTR,IDTR寄存器

GDTR寄存器是48位的. 高32位保存GDT表的内存地址. 低16位保存的是GDT表的大小.

GDTR寄存器值得读写:

LGDT fword [地址] ; 将内存地址中存储的48位数据加载到GDTR寄存器总.高32位表示GDT表基地址,低16位表示大小
SGDT fword [地址] ; 将GDTR寄存器中的值存入到内存地址中.高32位表示GDT表基地址,低16位表示大小

MSR寄存器组

全称为: 特殊模组寄存器组

这组寄存器它们没有名字, 只有编号, 它们保存了大量的信息. 这些信息可以通过两条指令和一个编号来读写:

  • RDMSR - 读特殊寄存器的值 , 指令默认使用ecx寄存器来保存要读取的MSR寄存器的编号, 使用edx:eax来保存读取结果.

  • WRMSR- 写特殊寄存器 , 指令默认使用ecx寄存器来保存要写入的MSR寄存器的编号, 使用edx:eax来保存要写入的值.

常见MSR编号(其余见Intel手册第三卷第35章)

猜你喜欢

转载自www.cnblogs.com/ltyandy/p/11418361.html