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