保护模式下的物理地址的确定性问题
我从未度过没有编程的一天. --- John Carmark
前些时候在阅读一个C程序对应的汇编代码时遇到了一个问题,当时就是想找到一个变量对应的物理地址.
实际上,在用户级别上,是确定不了的:
这是因为此时的基地址的受到保护:
基地址不再有段寄存器直接获得,而是存储在一个被称为段描述表项的结构当中.
然而,段描述表项的结构的首地址这个时候用户是无法获取的.
因为这个结构的首地址地址是由GDTR寄存器或者LDTR寄存器与段寄存器共同决定.
而对这GDTR寄存器或者LDTR寄存器两个寄存器的访问需要特权指令.用户级别下是做不到的.
换句话说,只有在系统内核的状态下才能做到.
既然用户级别下确定不了基地址,当然也就谈不上确定物理地址了.