我正在为游戏制作 Pixel-Cheat。该程序目前仅适用于 64 位,我正在尝试编译为 32 位。
我尝试了很多方法来查找进程的基地址,但无济于事。只有 64 位功能有效,它会创建一个 64 位程序。
这是我的 64 位工作功能:
DWORD64 GetModuleBase(HANDLE hProc, string &sModuleName)
{
HMODULE *hModules;
char szBuf[50];
DWORD cModules;
DWORD64 dwBase = -1;
//------
EnumProcessModulesEx(hProc, hModules, 0, &cModules, LIST_MODULES_ALL);
hModules = new HMODULE[cModules/sizeof(HMODULE)];
if(EnumProcessModulesEx(hProc, hModules,
cModules/sizeof(HMODULE), &cModules, LIST_MODULES_ALL)) {
for(int i = 0; i < cModules/sizeof(HMODULE); i++) {
if(GetModuleBaseName(hProc, hModules[i], szBuf, sizeof(szBuf))) {
if(sModuleName.compare(szBuf) == 0) {
dwBase = (DWORD64)hModules[i];
break;
}
}
}
}
delete[] hModules;
return dwBase;
}
google 上的所有 32 位功能都失败,出现错误:
21 59 C:\Users\Administrator\Documents\main.cpp [错误] 从 'BYTE* {aka unsigned char*}' 转换为 'DWORD {aka long unsigned int}' 失去精度 [-fpermissive]
如何让这段代码在 32 位下工作?