gpt4 book ai didi

assembly - 如果改变CS段寄存器会发生什么? (你会怎么做?)

转载 作者:行者123 更新时间:2023-12-02 19:34:03 24 4
gpt4 key购买 nike

我读了这篇文章:http://static.patater.com/gbaguy/day3pc.htm

它包括句子

DON'T EVER CHANGE CS!!

但是如果您修改了 CS 段寄存器,到底会发生什么?为什么这么危险?

最佳答案

cs 是代码段。 cs:ip,表示csip(指令指针)一起指向下一条指令的位置。因此,对 csip 或两者的任何更改都会更改获取和执行下一条指令的地址。

通常,您可以将 cs 更改为 jmp(长跳)、call(长调用)、retfint3intiret。在 8088 和 8086 中,pop cs 也可用(操作码 0x0F)。 pop cs 在 186+ 中不起作用,其中操作码 0x0F 是为多字节指令保留的。 http://en.wikipedia.org/wiki/X86_instruction_listings

跳远或长叫本身并没有什么危险。您只需要知道您跳转或调用的位置,并且在保护模式下您需要有足够的权限才能执行此操作。在 16 位实模式(例如 DOS)下,您可以跳转并调用您想要的任何地址,例如jmp 0xF000:0xFFF0cs 设置为 0xF000,将 ip 设置为 0xFFF0,即BIOS代码的起始地址,从而重新启动计算机。不同的内存地址有不同的代码,从而导致不同的结果,理论上一切可能发生(如果你跳到用于格式化硬盘的BIOS代码,具有有效的寄存器和/或堆栈值,那么硬盘将被格式化'按照要求')。实际上,对大多数地址的 jmpcall 可能很快就会导致无效操作码或其他异常(除以零、除法溢出等)。

关于assembly - 如果改变CS段寄存器会发生什么? (你会怎么做?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12263720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com