03DB_TYPE
d/b位要配合TYPE一起看
D/B位的作用:它会影响相关的相关数据段的寻址方式(我这里说的数据段指的是数据/代码段中的数据段,就比如CS段 代码段其实存储的也是数据,SS段 堆栈段存储的也是数据,我自己的理解)
对CS段的影响
如果D/B位为1 采用32位寻址方式
如果D/B位为0 采用16位寻址方式
前缀67 改变寻址方式
使用66的前缀,将使堆栈改编为16位压栈
知识点:
如果原本的段描述符的D/B位为1,此时加了前缀67,那么就变为了16位寻址
如果原本的段描述符的D/B位为0,此时加了前缀67,那么就变为了32位寻址
对SS段的影响
如果D/B = 1 隐式堆栈访问指令(如:PUSH POP CALL) 使用32位堆栈指针寄存器ESP
如果D/B = 0 隐式堆栈访问指令(如:PUSH POP CALL) 使用16位堆栈指针寄存器SP
跨段跳转,不提权。压栈的默认操作数改变为16位的段
改变ss段(造成esp寻址方式改成16进制即sp), 以及看看段中2如何变成3。
程序崩溃原因? 答:限制了寄存器只能访问16位,但是0-ffff是没有挂页的,用来处理野指针报错。
向下拓展的数据段
如果D/B = 1 段上线为4GB
如果D/B = 0 段上线为64KB
向上生长,代表limit是可访问。向下生长,代表limit不可访问
纯段模式用
非一致代码段 应用层不能调用内核层代码
一直代码段 应用层可以调用内核层代码 cs描述的一致代码段

浙公网安备 33010602011771号