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

问题

一直在用微软自带的汇编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的时候,会覆盖了我所键入的代码。因此,最好还是要检查下代码被改了没,然后再进行执行调试。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值