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

系统内存访问是通过分段 即通过 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

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


以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的探测

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

写入后直接跑这段汇编代码,其实发现是可以正确的打印出val的值的。
但如果给它的base+1变成00cff300^0001ffff会发现打印的值会有错误


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

对段长度的探测:


这里可以正确访问

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

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


编译后报错,原因是段是无效段,赋值时会有检测是否是有效段如果是无效段就不让赋值。
作业:按照格式拆分

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

浙公网安备 33010602011771号