we104676 发表于 2022-4-18 12:34:36

c++怎么读64位程序的模块基址

求大佬给个例子

littleboy 发表于 2022-4-18 12:34:37

//获取模块基址
PVOID GetModuleBaseAddr(const char* szWindowName, const char* szModuleName)
{
        DWORD pid = GetProcessId(szWindowName);
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,NULL,pid);
        MODULEENTRY32 me32;
        ZeroMemory(&me32, sizeof(me32));
        me32.dwSize = sizeof(me32);
        HANDLE hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
        unsigned long long baseAddr = 0;
        while (Module32Next(hModuleSnap, &me32))
        {
                if (strstr(me32.szModule, szModuleName))
                {
                        break;
                }
        }
        printf("%16s模块基址=%#p,%16s模块大小=%#x\n",szModuleName, me32.modBaseAddr, szModuleName,me32.modBaseSize);
        CloseHandle(hModuleSnap);
        CloseHandle(hProcess);
        return me32.modBaseAddr;
}

DWORD GetProcessId(const char* szWindowName)
{
        HWND hwnd = FindWindowA(NULL, szWindowName);
        DWORD pid = 0;
        GetWindowThreadProcessId(hwnd, &pid);
        return pid;
}

littleboy 发表于 2022-4-18 17:14:18

littleboy 发表于 2022-4-18 16:30


鬼谷八荒亲测有效。项目测试文件:
链接:https://pan.baidu.com/s/1xHEa7oJDwah6G8J7biDEoQ?pwd=gr9b
提取码:gr9b
--来自百度网盘超级会员V5的分享

we104676 发表于 2022-4-18 20:16:10

littleboy 发表于 2022-4-18 16:30


CreateToolhelp32Snapshot弄不了64位游戏

littleboy 发表于 2022-4-18 23:29:44

we104676 发表于 2022-4-18 20:16
CreateToolhelp32Snapshot弄不了64位游戏

编译成64位程序获取到的就是64位

we104676 发表于 2022-4-19 12:57:26

littleboy 发表于 2022-4-18 23:29
编译成64位程序获取到的就是64位

报错了,你真的用过CreateToolhelp32Snapshot取64位程序模块基址?

littleboy 发表于 2022-4-19 17:10:03

本帖最后由 littleboy 于 2022-4-19 17:27 编辑

we104676 发表于 2022-4-19 12:57
报错了,你真的用过CreateToolhelp32Snapshot取64位程序模块基址?

你是不是没有定义这个函数?建议你先看看我分享的项目文件

we104676 发表于 2022-4-19 18:37:56

本帖最后由 we104676 于 2022-4-19 18:42 编辑

littleboy 发表于 2022-4-19 17:10
你是不是没有定义这个函数?建议你先看看我分享的项目文件
多谢大佬,搞定了,我的不能像你那样把etProcessId放在GetModuleBaseAddr后面

littleboy 发表于 2022-4-19 20:21:32

we104676 发表于 2022-4-19 18:37
多谢大佬,搞定了,我的不能像你那样把etProcessId放在GetModuleBaseAddr后面

建议你多了解一点C语言基本语法,定义放在源文件里,声明放在头文件里。

1232 发表于 2022-5-9 15:03:42

祝资源共享吧越来越火!
页: [1]
查看完整版本: c++怎么读64位程序的模块基址