段探测

在此之前了解一下16位CPU寻址的原理

image

系统内存访问是通过分段 即通过 segment:offset。

   有六个16位段寄存器:CS、DS、ES、FS、GS和SS。当使用段寄存器(segment registers)时,使用以下符号给出地址

 12F3  :  4B27

   ^              ^

Segment   Offset

   解释:  其中“segment”是段寄存器中的值,“Offset”是地址寄存器中的一个值

  分段(Segments )和偏移(Offsets )通过以下等式与物理地址相关:

 PhysicalAddress = Segment * 16 + Offset

因此,12F3:4B27对应于物理地址0x17A57。任何物理地址都可以用多种方式表示,具有不同的段和偏移。例如,物理地址0x210可以是0020:0010、0000:0210或0021:0000



CS 1B 代码段寄存器 描述的代码

SS 23 栈段 描述栈,比如局部变量

DS 23 数据段 堆地址,全局变量

ES 23 扩展段 串copy movsb so edi esi

FS 上下文环境段 R3 代表我们TEB R0代码是KPCR

 

image

 例如1B :0001 1011 RPL为11(rpl请求权限),TI为0(如果TI为0的话查找的是(全局)GDT,如果是1的话查找的是(本地)LDR),index为0 0000 0000 0011也就是3。

image

image

 

以00cffb00^0000ffff为例子进行解析

首先分析前32位:

24-31Base:0000 0000

c为1100,b为1011

23 G:1   22 D/B:1  21:0  20 AVL:0

16-19 SegLimit:1111

15 P:1  13-14 DPL:11  12 S:1

8-11 Type:1011  0-7Base:0000 0000

再分析后32位:

0-15 SegLimit:1111 1111 1111 1111

16-31 Base:0000 0000 0000 0000

因此汇总:

Base:00 00 0000

Seglimit: fffff

Type:b  S:1  DPL:3  P:1  AVL:0  def:0  D/B:1   G:1

G为0时,Limit单位=字节Byte  G=1时,limit单位=4KB页面(0x1000字节)

对于段读写的探测:

0040f300^00000fff

这里分析得到它的seglimit为00fff

对base的探测

image

这里最后将es的值赋给ds是因为一开始这两个值是相同的

image

写入后直接跑这段汇编代码,其实发现是可以正确的打印出val的值的。

但如果给它的base+1变成00cff300^0001ffff会发现打印的值会有错误

image

 

image

 

它打印的是fe000001而不是val正确的值100

image

 

对段长度的探测:

 

image

 

image

 这里可以正确访问

image

这里则会报错,原因是要读取4个字节,而seglimit是0xFFF,超过了所以出错

image

这里对p位再进行探测,p为0是无效段,p为1是有效段

image

 

image

 

编译后报错,原因是段是无效段,赋值时会有检测是否是有效段如果是无效段就不让赋值。

 

作业:按照格式拆分

image

 

00cf9b00^0000ffff

Base:00000000

Limit:fffff

Type:b

(9:1001) s:1 dpl:0 p:1

(c:1100)g:1 d/b:1 avl:0

 

00cf9300^0000ffff

Base:00000000

Limit:fffff

Type:3

(9:1001)s:1 dpl:0 p:1

(c:1100)g:1 d/b:1 avl:0  

 

00cffb00^0000ffff

Base:00000000

Limit:fffff

Type:b

(f:1111) s:1 dpl:3 p:1

(c:1100)g:1 d/b:1 avl:0

 

00cff300^0000ffff

Base:00000000

Limit:fffff

Type:3

(f:1111)p:1 dpl:3 s:1

(c:1100)g:1 d/b:1 avl:0

 

80008b1e^400020ab

Base:801e4000

Limit:20ab

Type:b

(8:1000)p:1 dpl:0 s:0

G:0 d/b:0 avl:0

 

834093f2^cc003748

Base:83f2cc00

Limit:3748

Type:3

(9:1001)p:1 dpl:0 s:1

(4:0100)g:0 d/b:1 avl:0

 

0040f300^00000fff

Base:00000000

Limit:fff

Type:3

(f:1111)p:1 dpl:3 s:1

(4:0100)g:0 d/b:1 avl:0

 

0000f200^0400ffff

Base:400

Limit:ffff

Type:2

(f:1111)p:1 dpl:3 s:1

G:0 d/b:0 avl:0

 

00cf7300^0001ffff

Base:1

Limit:fffff

Type:3

(7:0111)p:0 dpl:3 s:1

(c:1100)

 

830089f2^a0000068

Base:83f2a000

Limit:68

Type:9

(8:1000)p:1 dpl:0 s:0

G:0 b/d:0 avl:0

 

830089f2^a0680068

Base:83f2a068

Limit:68

Type:9

(8:1000)p:1 dpl:0 s:0

G:0 d/b:0 avl:0

 

800092b9^900003ff

Base:80b99000

Limit:3ff

Type:2

(9:1001)p:1 dpl:0 s:1

G:0 d/b:0 avl:0

 

posted @ 2026-10-23 18:47  面面mianmian  阅读(5)  评论(0)    收藏  举报
Live2D