环境:bochs2.11,linux0.11
在main函数中定义一个临时变量 int tmp = 1;
然后打印其地址
这个时候得到的是其逻辑地址
变量tmp存在于栈,所以先查找堆栈段寄存器 SS
共16位
高13位为编号(下标)
低前两位为权限(00为内核态,11为用户态)
低第三位(0代表使用GDT全局段描述符表,1代表使用LDT局部段描述符表)
在bochs中用dump_cpu查看所有寄存器的值
SS寄存器的值为 0x17
二进制为10 1 11
分析可得其使用LDT段描述符表,下标为2(即:LDT[2])
先找到GDT的起始地址,查看gdtr寄存器中的值
gdtr的值为0x5cb8
ldtr的值为0x68
二进制为 1101 0 00
分析可得ldt使用GDT,下标为13(即:GDT[13])
命令 xp/2w 以8字节显示GDT[13]的值,即全局段描述符表项