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;
}