ollydbg只能单线程调试,也就是每次只能跟一个线程。
那么如何进行多线程调试呢?
方法:首先是设置StrongOD,如下图:
去掉这个勾
来到CreateThread函数处
第三个参数ThreadFunction指定了新线程的入口地址,第四个参数pThreadPram为新线程所需的参数。
在入口地址处下断点,然后按F8过CreateThread后,发现无法跳转到断点处,此时需要手动修改它下面接着的代码,一般修改为Sleep函数。
执行到Sleep后,会跳转到新线程入口点地址。
附测试demo
#include <iostream>
#include <windows.h>
using namespace std;
int g_i = 0;
//线程W
LRESULT myWorkThread(DWORD)
{
while (1)
{
g_i = g_i + 1; //这里改写变量
::Sleep(2000);
printf("myWorkThread:%d\n", g_i);
}
}
//线程R
int main(int argc, char* argv[])
{
CloseHandle(::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)myWorkThread, NULL, 0, NULL));
while (1)
{
cout << "MainThread:" << g_i << endl;
//手动在这里断下,然后下硬件写断点,OD无法在 myWorkThread 中断下
Sleep(6 * 1000);
}
system("pause");
return 0;
}