- 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)