汇编debug程序跳转指令的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lovefengruoqing/article/details/79177769

问题

一直在用微软自带的汇编debug软件,今天突然有了需要修改ip指令的需求,我以为debug里面有自带的修改ip地址的方法,但是查了很多资料,发现并没有。

思路

后来我研究了一下,其实可以通过朝当前的ip指向的地址内写入一个jmp到目的地的指令,然后单步执行这个指令,那么ip就自动跳转到目的地去了。

方法

1.我朝内存中写入了一段汇编代码,比如这样:

0AE8:0100 mov ax,0
0AE8:0103 mov bx,1
0AE8:0106 add ax,bx
0AE8:0108 add bx,2
0AE8:010B cmp bx,10d
0AE8:010F jl 106

2.现在我的ip指向的并不是0100这个地址,比如指向的是0112,按r查看寄存器当前状态

-r
AX=0000  BX=0011  CX=0000  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
DS=0AE8  ES=0AE8  SS=0AE8  CS=0AE8  IP=0112   NV UP EI PL ZR NA PE NC
0AE8:0112 A2D899        MOV     [99D8],AL                          DS:99D8=00

3.然后朝ip指向的当前地址写入一段跳转指令

-a 112
0AE8:0112 jmp 100
0AE8:0114
-r
AX=0000  BX=0011  CX=0000  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
DS=0AE8  ES=0AE8  SS=0AE8  CS=0AE8  IP=0112   NV UP EI PL ZR NA PE NC
0AE8:0112 EBEC          JMP     0100
-t

AX=0000  BX=0011  CX=0000  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
DS=0AE8  ES=0AE8  SS=0AE8  CS=0AE8  IP=0100   NV UP EI PL ZR NA PE NC
0AE8:0100 B80000        MOV     AX,0000

可以看到写入跳转指令以后,单步执行,ip马上就跳转到指定的地址去了,即将执行的正是mov ax,0这一指令。

总结

其实想了想,上面的步骤并不是很严谨,如果你想直接用debug来验证自己的汇编代码,第一步就应该先将ip指向自己想要内存区域,第二步才是朝ip指向的内存中写入汇编代码,第三步才是进行调试。

当然如果你说要怎么修改寄存器的值,还是上面的思路,想好代码,写入内存,然后单步执行。

还有,差点忘了一点,也许上面的代码还有点问题,我ip所指向的内存离我写入汇编代码的地方太近了,也许我调整ip的时候,会覆盖了我所键入的代码。因此,最好还是要检查下代码被改了没,然后再进行执行调试。

猜你喜欢

转载自blog.csdn.net/lovefengruoqing/article/details/79177769
今日推荐