02段探测

02--段探测

CS 代码段寄存器 描述的代码
SS 栈段 描述栈,比如局部变量
DS 数据段 堆地址,全局变量
ES 扩展段 串copy movsb so edi esi
FS 上下文环境段 R3代表我们TEB R0代表是KPCR

windbg

r RGDT
d 查看内存 db/dw/dd/dq dds/dqs
e 写内存

IA-32卷3 3.4.1段选择符

段选择符

BASE

确定该段的第0字节在4GB线性地址空间中的位置。处理器将则3个基地址域组合在一起构成了一个32位地址值。段基址应当是16字节边界对齐的。16字节边界对齐不是必须的,但这种段边界的对齐能够使程序的性能最大化。

LIMIT

指明段或者门的类型,确定段的范围权限和增长方向。如何解释这个域,取决于该描述符是应用描述符(代码或数据)还是系统描述符,这由描述符类型标志(S 标记)所确定。代码段,数据段和系统段对类型域有不同的意义。

TYPE

当s标志位1时,小于等于7为数据段,大于7为代码段 。

S 标志

确定段描述符是系统描述符(S 标记为0)。 代码,数据段描述符(S标记为1)。

DPL 描述符特权级

指明该段的特权级。0为最高级

P(段存在)标志

为1代表段有效, 0无效

AVL

DEF

D/B

数据段为d, 代码段为b。

0代表16进制段, 1代表32位段

G (粒度)标志

代表单位是页, 0代表单位是字节
1页是4096字节, 16进制0x1000
换算一下限长:(0xfffff + 1) * 0x1000 = 0x100000000 - 1 = 0xffffffff
加1:是因为0也代表有一页。 减1:数组从0下标开始

0000 0000 0001 1 0 11 RPL请求权限
0 0000 0000 0011  //索引号 0003

0:GDT global decsrctor table 全局描述表
1: LDT local decsrctor table

r gdtr
80b99000
00cffb00`0000ffff
起始地址 限长 32位,4g

limit: fffff	//20位
base: 00000000
type: b
s: 1 //(S 标记为0)或者代码,数据段描述符(S标记为1)。
dpl: 3
p: 1
avl: 0
def: 0
d/b: 1
g: 1 //代表单位是页, 0代表单位是字节
1页是4096字节, 16进制0x1000
换算一下限长:(0xfffff + 1) * 0x1000 = 0x100000000 - 1 = 0xffffffff
加1:是因为0也代表有一页。 减1:数组从0下标开始

00cff300`0001ffff
limit: fffff
base:  00000001

有访问权限干扰,有基址, 有长度
posted @ 2024-10-18 23:10  千山_fantasy  阅读(8)  评论(0)    收藏  举报