ollydbg 多線程調試

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章