关于内核段选择子和段寄存器的一个小问题
近期在学习内核,遇到一个问题,请大佬帮忙解答,万分感谢!问题:段选择子不同,但是索引指向的段描述符是一样的,加载这两个段描述符,结果不一样!
GDTR表
kd> dq 8003f000
8003f00000000000`00000000 00cf9b00`0000ffff
8003f01000cf9300`0000ffff 00cffb00`0000ffff
8003f02000cff300`0000ffff 80008b04`200020ab
8003f030ffc093df`f0000001 0040f300`00000fff -->0x38
8003f0400000f200`0400ffff 0040f300`00000fff -->0x48
8003f05080008953`d1800068 80008953`d1e80068
8003f06000009302`2f20ffff 0000920b`80003fff
8003f070ff0092ff`700003ff 80009a40`0000ffff
测试代码
1、段选择子0x38,读取成功
__asm
{
mov ax,0x38;
mov es,ax;
mov ebx,es:;
}
2、段选择子0x48,读取失败
__asm
{
mov ax,0x48;
mov es,ax;
mov ebx,es:;
} 补充:环境是XP单核
页:
[1]