D/B位

当数据作用于代码段的时候就是d,当作用于数据段的时候就是b

加载进cs时,d/b如果是0的话,在32位默认操作数是16位的

改cs时不能直接进行修改,需要jmp far或者retf进行修改

 

image

 

image

 

image

 如图可见在d/b位为0后push 0只push了四位。

image

 这里继续push会发现会被断掉,因为仍然保持在16位

image

 

这里对type进行了修改,发现一运行2会自动变为3,这是由于type为时2是并没有被加载的,只要被加载过了就会被标记为accessed所以会自动变成3,证明在cpu上这个段已经被使用过了

image

 

而我们在db为0的情况下,对堆栈进行操作发现堆栈炸了,原因是本次堆栈的esp有六位而16位情况下只能操作4位地址,最多寻址到ffff所以会炸掉

 

当d/b位作用于数据段是什么情况呢?

image

 

这里发现作用于普通的数据段是没有影响的

 

段控制内存访问方向:

image

 

image

 

这里我们实现对于向下生长的实验

image

 

image

 

image

 

image

 

 

posted @ 2026-11-03 14:30  面面mianmian  阅读(3)  评论(0)    收藏  举报
Live2D