D/B位
当数据作用于代码段的时候就是d,当作用于数据段的时候就是b
加载进cs时,d/b如果是0的话,在32位默认操作数是16位的
改cs时不能直接进行修改,需要jmp far或者retf进行修改



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

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

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

而我们在db为0的情况下,对堆栈进行操作发现堆栈炸了,原因是本次堆栈的esp有六位而16位情况下只能操作4位地址,最多寻址到ffff所以会炸掉
当d/b位作用于数据段是什么情况呢?

这里发现作用于普通的数据段是没有影响的
段控制内存访问方向:


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





浙公网安备 33010602011771号