作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在没有任何手动输入的情况下找到程序的当前基地址。基本上我想使用偏移量写入内存中的特定地址。为此,我需要找到我正在修改的程序的基地址。目前,我可以通过另一个软件手动查找基地址来做到这一点,但是,我希望它是自动化的。
我试过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
这些是我们需要的主要标题。
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/
我是一名优秀的程序员,十分优秀!