6.[保护模式]段描述符属性_S位_TYPE域

 

1.S位

 S = 1 代码段或者数据段描述符

S = 0 系统段描述符

注意:DPL在WINDOWS内只会出现两种情况,全是0或者1 

代码段那么P为已经确定为1

S也为1 

那么DPL 为0 则是9

为1 则是F

2.TYPE域

 

TYPE域小于8则为数据段

大于8则是代码段

数据段说明:

8A 代表是否被加载如果访问过则为1 反之则为0

9W 代表是否可写,如果为0则代表不可写,反之亦然

10E 拓展位, 为0 向上拓展,为1向下拓展

第一步:先构造一个向下拓展的段描述符

00cf9700`0000ffff

第二步:段描述符加载到段寄存器里

0: kd> dq gdtr L40
80b95000  00000000`00000000 00cf9b00`0000ffff
80b95010  00cf9300`0000ffff 00cffb00`0000ffff
80b95020  00cff300`0000ffff 80008b1e`600020ab
80b95030  84409333`dc003748 0040f300`00000fff
80b95040  0000f200`0400ffff 00000000`12345678
80b95050  84008933`b0000068 84008933`b0680068
80b95060  00000000`00000000 00000000`00000000
80b95070  800092b9`500003ff 00000000`00000000
80b95080  00000000`00000000 00000000`00000000
80b95090  00000000`00000000 00000000`00000000

0: kd> eq 80b95090  00cf9700`0000ffff               //构造向下拓展

0: kd> dq gdtr L40
80b95000  00000000`00000000 00cf9b00`0000ffff
80b95010  00cf9300`0000ffff 00cffb00`0000ffff
80b95020  00cff300`0000ffff 80008b1e`600020ab
80b95030  84409333`dc003748 0040f300`00000fff
80b95040  0000f200`0400ffff 00000000`12345678
80b95050  84008933`b0000068 84008933`b0680068
80b95060  00000000`00000000 00000000`00000000
80b95070  800092b9`500003ff 00000000`00000000
80b95080  00000000`00000000 00000000`00000000
80b95090  00cf9700`0000ffff 00000000`00000000

 

 

3.结果显示不能读写因为在BASE+LIMIT里面,但是如果超出绿色范围则能读写

//读写测试,测试在向下拓展中 fs.base+limit是否能读写
#include "stdafx.h" #include <stdlib.h> int value = 0; int main() { //进入内联汇编 __asm { mov ax, 0x93; mov ds, ax; mov edx, 0x20; mov dword ptr ds:[value],edx }; printf("%x\n", value); return 0; }

** 栈操作由操作系统自动SS去描述

 

fffff880`0470b4c0 00000000`00000000 00000000`00000000
fffff880`0470b4d0 00209b00`00000000 00cf9300`0000ffff
fffff880`0470b4e0 00cffb00`0000ffff 00cff300`0000ffff
fffff880`0470b4f0 0020fb00`00000000 00000000`00000000
fffff880`0470b500 04008b70`4ec00067 00000000`fffff880
fffff880`0470b510 ff40f3fd`f0007c00 00000000`00000000
fffff880`0470b520 00cf9a00`0000ffff 00000000`00000000
fffff880`0470b530 00000000`00000000 00000000`00000000

 
只有第5位为9或者和F的才可能是代码段和数据段  

代码段说明:

A 访问位

R 可读位

C 一致位

    C= 1 一致代码段          3环可以调0环

    C= 0 非一致代码段  各自调用

3.系统段描述符

当s = 0 时,改段描述符为系统描述符

 小于8的是16位

 大于8为32位

posted @ 2019-07-14 15:25  瀚瀚大人  阅读(482)  评论(0编辑  收藏  举报