Windows内核基础知识-2-段描述符

Windows内核基础知识-2-段描述符

Windows内核基础知识-2-段描述符

 

 

比如:

ES 002B 0(FFFFFFFF)

意思就是es段寄存器,段选择子/段选择符 为002B,

起始地址base为0,

限制范围Limit地址最大能寻找的长度为:FFFFFFFF,表示的是一个范围。从.base到最后最长的地址的相对值。

简单来说就是偏移地址的范围。地址=段寄存器基址base+偏移地址,这个limit可以理解为偏移地址的范围

 

Windows内核基础知识-2-段描述符

 

 

可以看到所有的段寄存器除了FS别的都是一样的。

 

获取段寄存器的信息:

如果你正常在调试,用什么WinDbg这种工具,就只能看到的是段选择子,不会有后面的什么基址,偏移地址范围这种东西。

Windows内核基础知识-2-段描述符

 

 

段寄存器这么多信息存放在了哪里?

破案了,段寄存器的一堆属性都存放在了一张表里,可以理解为是一个数组,一个QWORD类型数组

通过段选择子来获取段寄存器信息

只有段选择子是公布出来了的,所以直接通过它来找信息了。

段选择子的结构体:

Windows内核基础知识-2-段描述符

 

 

RPL:请求特权级别(Request Privilege Level),就是请求访问者所使用的权限级别。

TI:这个标志位决定要去什么表里查询数据:0表示GDT表,1表示LDT表

GDT表:可以认为是一个数组,元素为QWORD(64位)大小

Index:数据所在表的索引

 

例子:

这里来获取一下es的内容

Windows内核基础知识-2-段描述符

 

 

es = 23 ==00100 0 11

拆下来就是 :

RPL=11

TI=0

索引值=00100 = (D)4(十进制的4)

 

gtd表的首地址保存在gdtr寄存器里面,同理ldt也是。gdtr和ldtr并不是真正是寄存器,只是一个虚拟的。

 

在WinDbg里面查看gdtr的内容:

Windows内核基础知识-2-段描述符

 

 

查看索引为4的内容(索引为4就是第五个):

Windows内核基础知识-2-段描述符

 

 

这个东西对应的内容就是段描述符了,所有的段寄存器内容都在里面。

Windows内核基础知识-2-段描述符

上一篇:仿乐享微信源码分享,把你的生意做到微信里


下一篇:C# .ToString() 格式化