首页
社区
课程
招聘
[求助]关于编写OD插件中GO命令的问题
发表于: 2011-9-13 15:48 3940

[求助]关于编写OD插件中GO命令的问题

2011-9-13 15:48
3940
这几天在学习编写OD插件,使用平台是VS2010 采用的是SDK方式来编写的,通过学习OD开发API手册,下INT3断点和取消INT3断点都可以实现了。
    现在的问题是,比如说我在0x00501000 这个内存地址用Setbreakpoint(0x00501000,TY_ACTIVE,NULL);   //设置INT3断点,
接着我用执行程序,当程序执行到0x00501000这个内存地址就会相应的发生中断响应,断点来后,我现在想要让程序继续执行下去,就要用到GO语句,
通过查看API手册得知:
继续执行调试程序,如果不能继续执行,返回 -1。不适当地使用这一功能可能会给 OllyDbg 带来不稳定或一些未知的状态。对于简单的任务,可以
考虑使用 Sendshortcut.

int Go(ulong threadid,ulong tilladdr,int stepmode,int givechance,int backupregs);

参数:

threadid ?要继续的线程id 。如果threadid为 0,函数假定线程为最后调试事件发生时线程;

tilladdr - 如果 stepmode 是 STEP_SKIP,函数请求跳过所有指令立即执行到 tilladdr。要调用的子程序必须保证 tilladdr 的指令是该子程序一连串指令的首指令,且其内部指令连续的分布于期间,没有跳转/返回到其外。否则,将设置临时断点于其上;

tilladdr - 这样进程将暂停在该点(就像反汇编器中的“运行到所选”);

stepmode - 步进模式,执行下列步骤之一:与前面调用Go 具有相同动作:

STEP_SAME        与前面调用 Go 具有动作相同
STEP_RUN        运行程序
STEP_OVER        步过 (立即执行子程序调用)
STEP_IN        步入(进入子程序)
STEP_SKIP        连续跳过直到指定地址
givechance - 如果调试进程因异常暂停,且本参数不为 0,将传递到由应用程序设置的异常处理程序中;
backupregs -如果不是0 ,更新旧的线程寄存器(t_thread 结构的 oldreg 成元)。或备份到已修改值高亮的寄存器中。

接着我用
Setbreakpoint(0x00501000,TY_DISABLED,NULL);   //删除INT3断点

然后再用GO命令
Go(0,0x00501000, STEP_RUN, 0, 1);

这时候程序就会死掉或是说是阻塞掉
请问一下,这一个GO命令要具体怎么来写呢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 5
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
搞定了,原来是要在回调函数里写才可以
2011-9-16 11:54
0
游客
登录 | 注册 方可回帖
返回
//