首页
社区
课程
招聘
[分享][原创]D/B位与向下拓展的实验与总结
发表于: 2021-12-31 15:23 4861

[分享][原创]D/B位与向下拓展的实验与总结

2021-12-31 15:23
4861

转载: D/B位、一致与非一致代码段、向下拓展的实验与总结 - OneTrainee - 博客园 (cnblogs.com)

 

一、D/B位的介绍

 

D/B位当对于代码段时其是D位,当对于数据段时其是B位。

 

对于代码段,会影响其寻址模式,影响硬编码中指令前缀;对于数据段,其表示段长,当B位为0时,表示该段为16位段,此时其G为自然是无效的。

 

二、在代码段属性中有一个向上拓展与向下拓展(此与代码段的B位紧密相关的)。

 

向上拓展 [base,base+limit] 有效,其余无效;向下拓展[base,base+limit]无效,其余有效。
图片描述

 

三、向上拓展与向下拓展的实验

 

为了证明该理论,我们来进行一个实验。

 

1.源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
 
char g_buf[] = {125, 124, 123, 121};
int main(int argc, char* argv[])
{
        printf("全局变量的地址为: 0x%p, 请在48处填写数据段描述符\r\n", &g_buf);
        getchar();
        char l_var = 0;
        char u_aa = 0;
        __asm
        {
                mov ax, 0x48
                mov ds, ax
                mov al, byte ptr ds:[0]
                mov cl,byte ptr ds:[1]
                mov u_aa,cl
                mov l_var, al
                mov ax, 0x23
                mov ds, ax
        }
        printf("局部变量的值为:%d  %d\r\n", l_var,u_aa);
        getchar();
        return 0;
}

2. 实验思路

 

我们根据该地址构造段描述符,默认向上拓展,如果此时改为向下拓展,则访问数组肯定会出错(被置为不可访问)。

 

3. 代码段描述符模板

 

我们根据ds位去找对应的代码段模板 00cff300`0000ffff

 

4. 运行程序,查看数组地址来构造段描述符

 

图片描述

 

00cff300`0000ffff -> 00cff342`5A30ffff(向上拓展)-> 00cff742`5A30ffff(向下拓展)

 

5. 利用windbg将构造的向下拓展的段描述符填写进入0x48偏移处,继续运行程序,显示访问异常,而改为向上拓展的段描述符则不会出现访问异常
图片描述

 

一致代码段,可以让三环的权限访问零环的代码,现在操作系统都采用非一致代码段。

 

难道这就意味着如果将段描述符改为一致代码段,那么三环可以访问零环吗?当然不可以,因为现在操作系统采用段页机制,即使过了段保护,也会存在页保护让你禁止访问。

 

四、一致代码段与非一致代码段

 

一致代码段,可以让三环的权限访问零环的代码,现在操作系统都采用非一致代码段。

 

难道这就意味着如果将段描述符改为一致代码段,那么三环可以访问零环吗?当然不可以,因为现在操作系统采用段页机制,即使过了段保护,也会存在页保护让你禁止访问。


我的实验




 

00cff300`0000ffff + offset:0x0042 2A30 → 00cff342`2A30ffff (向上拓展)→ 00cff742`2A30ffff (向下拓展)

红色部分是段选择子的Base

向上拓展


 


向下拓展


注解:ds赋值0x48 (二进制:01001000),可以计算出选择子的GDT的index位第十项


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 26588
活跃值: (63252)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
这篇文章是转载他人的,还是转载自己的?
2021-12-31 17:30
0
雪    币: 4271
活跃值: (8640)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
Editor 这篇文章是转载他人的,还是转载自己的?
你好,上面一部分是转载他人的,下面“我的实验”部分是自己的。
2021-12-31 19:35
0
游客
登录 | 注册 方可回帖
返回
//