WIN32汇编: 29.Win32调试API第二部分[3]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 goddragon 的 blog

首先,需要得到该指令的地址。由于在我们的程序绑定到被调试程序时,被调试程序已经 处于循环语句中了,eip总是指向该指令。我们所要做的是得到eip的值。我们将使用 getthreadcontext来达到此目的。将上下文结构成员中contextflags设置 为context_control ,这样告诉getthreadcontext我们需要它去填充上下 文结构的成员中的"控制"寄存器。

          invoke writeprocessmemory, dbevent.u.createprocessinfo.hprocess, context.regeip ,addr buffer, 2, null

得到eip的值以后,可以调用writeprocessmemory来用nops覆盖"jmp $" 指令,这样将使被调试程序退出无限循环。在向用户显示了信息之后,调用continuedebugevent 来恢复被调试程序的运行。由于指令"jmp $"已被nops覆盖,被调试程序将继续 显示窗口,并进入消息循环。证据是我们在屏幕上观察到了次窗口。

另一个例子与此稍有不同,它是将被调试程序从无限循环中中断。

.......
.......
.if dbevent.dwdebugeventcode==create_process_debug_event
   mov context.contextflags, context_control
   invoke getthreadcontext,dbevent.u.createprocessinfo.hthread, addr context
   add context.regeip,2
   invoke setthreadcontext,dbevent.u.createprocessinfo.hthread, addr context
   invoke messagebox, 0, addr loopskipped, addr appname, mb_ok+mb_iconinformation
.......

本文关键:asm
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top