SmR*_*Guy 5 x86 assembly x86-16
我读了这篇文章:http://static.patater.com/gbaguy/day3pc.htm
它包括句子
不要改变CS !!
但是,如果修改了CS段寄存器,究竟会发生什么?为什么这么危险?
cs是代码段.cs:ip,这意味着cs与ip(指令指针)一起指向下一条指令的位置.因此,任何改变cs或ip或同时改变从下一个指令将是获取和执行的地址.
通常你改变cs了jmp(跳远), call(长调用), ,,retf 或.在8088和8086 也可用(操作码0x0F).将无法在186+中工作,其中操作码0x0F保留用于多字节指令. http://en.wikipedia.org/wiki/X86_instruction_listingsint3intiretpop cspop cs
在跳远或长时间通话中没有任何固有的危险.您只需要知道您跳转或呼叫的位置,并且在保护模式下,您需要有足够的权限来执行此操作.在16位实模式(例如DOS)中,您可以跳转并调用您想要的任何地址,例如.jmp 0xF000:0xFFF0集cs到0xF000和ip到0xFFF0,这是BIOS代码的起始地址,并且因此重新启动计算机.不同的内存地址有不同的代码,从而产生不同类型的结果,理论上一切都可能发生(如果你跳转到用于格式化硬盘驱动器的BIOS代码,有效的寄存器和/或堆栈值,那么硬盘驱动器将被格式化'按照要求').在实践中jmp,call对大多数地址而言,很快就会导致无效的操作码或其他一些异常(除以零,分频溢出等).
| 归档时间: |
|
| 查看次数: |
3799 次 |
| 最近记录: |