向指定线程插入异常.docVIP

  • 2
  • 0
  • 约2.39千字
  • 约 4页
  • 2017-06-08 发布于重庆
  • 举报
向指定线程插入异常

向指定线程插入异常 一:输入 1.HANDLE hThread 线程句柄 2. void (*ThrowFun)() 异常函数指针 二:将指定线程挂起来 将线程挂起来来。暂停线程的目的是使线程停下来,方便向线程的栈空间插入代码。也方面调试代码。 SuspendThread hThread 三:获取线程的当前状态 通过GetThreadContext获取线程的寄存器的值。主要是要获取线程栈空间的ESP指针。以便向线程栈空间插入返回地址,模拟成当前线程调用ThrowFun。 四:让线程执行输入的函数指针 首先,向栈空间插入线程的当前地址。以便模拟成从该地址调用了ThrowFun con.Esp - 4; * int* con.Esp con.Eip; 然后,将线程的EIP指针直接设置为ThrowFun的入口。这样线程就会转到ThrowFun函数执行。 五:唤醒线程 因为线程在我们的SuspendThread hThread 调用前可能已经被多次的挂起了。为了让线程被真正的被唤醒,需要多次调用ResumeThread直到线程被真正的唤醒。 for unsigned i 0; i count; ++i ResumeThread hThread ; 六:如果线程调用了Sleep函数 但是,如果该线程已经处在Sleep调用中,除非Sleep的时间到了。否则线

文档评论(0)

1亿VIP精品文档

相关文档