这几天在学习编写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期)