gpt4 book ai didi

c++ - 在存储/内存中查找特定程序的基地址?

转载 作者:行者123 更新时间:2023-12-01 14:08:03 25 4
gpt4 key购买 nike

我想在没有任何手动输入的情况下找到程序的当前基地址。基本上我想使用偏移量写入内存中的特定地址。为此,我需要找到我正在修改的程序的基地址。目前,我可以通过另一个软件手动查找基地址来做到这一点,但是,我希望它是自动化的。
我试过GetModuleHandle(NULL)并将其转换为 uintptr_t获取基地址,但它似乎没有指向正确的位置。
我可能不理解某些事情,我感谢所有帮助。
编辑:我正在寻找基地址的相对偏移量。我找到了一种获取基地址的方法,现在我只需要实际基地址的偏移量。
-- 每个程序都有自己的常数相对偏移量,可以在网上或通过特殊软件找到。
解决方案在下面。

最佳答案

我对此进行了很多研究,我们只需要两种方法,两种方法即可找到您想要的任何进程的基地址。

DWORD GetProcessId(const wchar_t* processName); //gets the process Id

uintptr_t GetModuleBaseAddress(DWORD processId, const wchar_t* moduleName); //gets the module base address
这些是我们需要的主要标题。
第一个 header 将通过拍摄所有正在运行的进程的快照并将每个名称与您传入的名称进行比较来找到进程 ID。
DWORD GetProcessId(const wchar_t* processName) {

DWORD processId = 0;
HANDLE hSnap = (CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0));
if (hSnap != INVALID_HANDLE_VALUE) {

PROCESSENTRY32 processEntry;
processEntry.dwSize = sizeof(processEntry);

if (Process32First(hSnap, &processEntry)) {

do {

if (!_wcsicmp(processEntry.szExeFile, processName)) {

processId = processEntry.th32ProcessID;
break;
}
} while (Process32Next(hSnap, &processEntry));
}
}
else {

cout << "CreateToolhelp32Snapshot failed. GetLastError = " << dec << GetLastError() << endl;
system("pause");
return EXIT_FAILURE;
}

CloseHandle(hSnap);
return processId;
}
此方法对指定进程中所有正在运行的模块进行快照,并比较您指定的每个模块(在我的情况下,我需要整个进程的基地址,因此它与 processName 相同)当前的每个模块过程。
uintptr_t GetModuleBaseAddress(DWORD processId, const wchar_t* moduleName) {

uintptr_t moduleBaseAddr = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, processId);
if (hSnap != INVALID_HANDLE_VALUE) {

MODULEENTRY32 moduleEntry;
moduleEntry.dwSize = sizeof(moduleEntry);
if (Module32Next(hSnap, &moduleEntry)) {

do {

if (!_wcsicmp(moduleEntry.szModule, moduleName)) {

moduleBaseAddr = (uintptr_t)moduleEntry.modBaseAddr;
break;
}
} while (Module32Next(hSnap, &moduleEntry));
}
}

CloseHandle(hSnap);
return moduleBaseAddr;
}
我的理解是,每个程序都有自己的基地址(我们找到的)以及一个设置指针,它将引导您到动态指针基地址(您添加到基地址的指针可以通过特殊软件找到或在线)。
谢谢大家!

关于c++ - 在存储/内存中查找特定程序的基地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63257265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com