首页
社区
课程
招聘
[旧帖] [求助]请问在ODBG中如何知道上一条指令从哪里来? 0.00雪花
发表于: 2008-9-30 01:15 3765

[旧帖] [求助]请问在ODBG中如何知道上一条指令从哪里来? 0.00雪花

2008-9-30 01:15
3765
调试一个程序的过程中,中断在了一个地址处,这时我想知道这指令的上一条指令是从哪里来的该怎么做?堆栈中没有可用信息,因为这条指令应该是从哪里跳转来的,所以也不能执行到返回,ODBG能记忆上一条指令地址就好了。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 208
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DOS时代16位的 Turbo Debugger 有这个功能,能倒着执行
后来的32位调试器都没有这个功能了。笨办法就是反编译,然后在汇编程序中找,只要不是跳转到内存或寄存器的,就能找到
2008-9-30 08:41
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,不过这个程序反编译肯定不能找到的,首先是它使用了动态解密代码,然后这条指令前面的指令肯定是使用的寄存器跳转,难道就没有一点办法吗?其实OD在中断时将上一条指令显示出来应该没有多大困难吧?
2008-9-30 11:26
0
雪    币: 295
活跃值: (141)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
用OD的Run跟踪功能~
2008-9-30 11:33
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
可能的话, 写个脚本. 在快接近时断下来. 2 种方法:
1. 单步, 判断流程转移的opcode, 若是下一步到target则记下目前eip
2. 单步  if EIP = Target { Show PreEIP }
         else PreEIP = EIP

方法2比较好实现
2008-9-30 11:35
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
多谢楼上几位,虽然我从未写过脚本,不过我现在就开始学习。
2008-9-30 13:46
0
游客
登录 | 注册 方可回帖
返回
//