c++怎么读64位程序的模块基址
求大佬给个例子//获取模块基址
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 16:30
鬼谷八荒亲测有效。项目测试文件:
链接:https://pan.baidu.com/s/1xHEa7oJDwah6G8J7biDEoQ?pwd=gr9b
提取码:gr9b
--来自百度网盘超级会员V5的分享 littleboy 发表于 2022-4-18 16:30
CreateToolhelp32Snapshot弄不了64位游戏 we104676 发表于 2022-4-18 20:16
CreateToolhelp32Snapshot弄不了64位游戏
编译成64位程序获取到的就是64位 littleboy 发表于 2022-4-18 23:29
编译成64位程序获取到的就是64位
报错了,你真的用过CreateToolhelp32Snapshot取64位程序模块基址?
本帖最后由 littleboy 于 2022-4-19 17:27 编辑
we104676 发表于 2022-4-19 12:57
报错了,你真的用过CreateToolhelp32Snapshot取64位程序模块基址?
你是不是没有定义这个函数?建议你先看看我分享的项目文件
本帖最后由 we104676 于 2022-4-19 18:42 编辑
littleboy 发表于 2022-4-19 17:10
你是不是没有定义这个函数?建议你先看看我分享的项目文件
多谢大佬,搞定了,我的不能像你那样把etProcessId放在GetModuleBaseAddr后面 we104676 发表于 2022-4-19 18:37
多谢大佬,搞定了,我的不能像你那样把etProcessId放在GetModuleBaseAddr后面
建议你多了解一点C语言基本语法,定义放在源文件里,声明放在头文件里。 祝资源共享吧越来越火!
页:
[1]