码迷,mamicode.com
首页 > 其他好文 > 详细

D/B位与向下拓展的实验与总结

时间:2020-02-26 01:40:46      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:lan   前缀   出错   gif   www   地址   argv   href   http   

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

D/B位与向下拓展的实验与总结

一、D/B位的介绍

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

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

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

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

   技术图片

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

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

1.源代码:

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

2. 实验思路

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

3. 代码段描述符模板

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

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

技术图片

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

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

 技术图片

 

 

 

 

 

技术图片

 

D/B位与向下拓展的实验与总结

标签:lan   前缀   出错   gif   www   地址   argv   href   http   

原文地址:https://www.cnblogs.com/onetrainee/p/12364694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!