03DB_TYPE

d/b位要配合TYPE一起看

D/B位的作用:它会影响相关的相关数据段的寻址方式(我这里说的数据段指的是数据/代码段中的数据段,就比如CS段 代码段其实存储的也是数据,SS段 堆栈段存储的也是数据,我自己的理解)

对CS段的影响

如果D/B位为1 采用32位寻址方式

如果D/B位为0 采用16位寻址方式

前缀67 改变寻址方式

02_002

使用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

02_003

跨段跳转,不提权。压栈的默认操作数改变为16位的段

02_004

改变ss段(造成esp寻址方式改成16进制即sp), 以及看看段中2如何变成3。

程序崩溃原因? 答:限制了寄存器只能访问16位,但是0-ffff是没有挂页的,用来处理野指针报错。

向下拓展的数据段

如果D/B = 1 段上线为4GB

如果D/B = 0 段上线为64KB

向上生长,代表limit是可访问。向下生长,代表limit不可访问

纯段模式用

非一致代码段 应用层不能调用内核层代码

一直代码段 应用层可以调用内核层代码 cs描述的一致代码段

posted @ 2024-10-18 23:09  千山_fantasy  阅读(3)  评论(0)    收藏  举报