关键字:
段寄存器、段选择子、全局描述符表、局部描述符表、段描述符、线性地址;
保护模式下使用段机制的CS,SS,DS,ESt,FS,GS保存的并不是实模式下的段地址,而是一个包含了段选择子和偏移地址的组合值。CPU在读取内存的时候,需要将段寄存器的值解析成为段地址,才能定位找到相应的段。下面我们一步一步解析这个过程。
知识点:
段寄存器值=段选择子,简单来说,段选择子就是用来指定段描述符的位置的一个值。
段选择子格式:
低0-1位表示特权级,为减少复杂度,目前不关注。低第2位表示指定的是描述符表是GDT(0)还是LDT(1),第3-15位指示段描述符在段描述表中的序号,很关键。
全局描述符表,一个系统只有一个全局描述符表,用来存放一些全局的段描述符(下面有讲述这个术语)。全局描述符表第一个项值规定是空值。全局描述符表的首地址由GDTR寄存器给出,这个值是线性地址,不需要解析。
GDTR的是一个48位的值,16-47位范围共32位(Base Address)的GDT基地址,0-15位范围共16位(Limit)表示GDT表的大小(以字节计算)。
在windbg内核模式,可以用r gdtr命令列出32位的基地址,用rgdtl列出16位的GDT大小值。