FSNSN 发表于 2021-11-19 10:37

关于内核段选择子和段寄存器的一个小问题

近期在学习内核,遇到一个问题,请大佬帮忙解答,万分感谢!

问题:段选择子不同,但是索引指向的段描述符是一样的,加载这两个段描述符,结果不一样!
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:;       
        }

FSNSN 发表于 2021-11-19 11:35

补充:环境是XP单核
页: [1]
查看完整版本: 关于内核段选择子和段寄存器的一个小问题