我正在寻找一种方法/函数,我可以用它来获取基地址"program.exe"+03262C08 -> B4895A0
。该地址来自Cheat Engine并且使用Pointer扫描器找到了基地址。在指针扫描器中,我可以按show module list
,地址为program.exe
,起始地址为00400000 program.exe
。扫描指针扫描器的地址09c3000
(我想在基地址+许多偏移量[最终地址]后到达的地址)。这个地址是某些对象的基础,但我无法到达该地址。我只能在00400000
处获得exe文件的基址。我试图从指针03262C08
(和其他人)添加偏移量,但我仍然无法达到地址。我不能使用功能FindWindow()
。成为该计划的名称将会改变,坚持它将是多余的。我正在使用OpenProcess(), EnumProcessModulesEx(), GetModuleFileNameEx()
函数。我也尝试过其他人,如GetModuleInformation(),...
,结果相同。 GetModuleHandle()
以结果0x126 [ERROR_MOD_NOT_FOUND]
结尾。我正在使用64位操作系统,我试图获得另一个进程的基址。 我可以看到本地计算机和“程序”过程模块上的所有进程。c/C++如何获取.exe运行进程的基地址?
if (!K32EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) {
return 1;
}
cProcesses = cbNeeded/sizeof(DWORD);
cout << setw(15) << left << "Process ID" << setw(10) << left << "Modules";
cout << setw(30) << left << "Process Name" << endl;
for (i = 0; i < cProcesses; i++) {
if (aProcesses[i] != 0) {
ProcessView::GetProccesses(aProcesses[i], modules, sizeModules, &cModules, &hCurrProcess);
if (hCurrProcess != NULL) {
cout << endl << setw(15) << left << aProcesses[i] << setw(10) << left << cModules;
ProcessView::PrintModuleName(hCurrProcess, modules);
CloseHandle(hCurrProcess);
}
}
}
ProcessView::GetProccesses(cProcesses, modules, sizeModules, &cModules, &hCurrProcess);
system("cls");
ProcessView::PrintModuleNameAll(hCurrProcess, modules, cModules);
我在这里添加了我创建的ProcessView.h文件中的函数定义。
static void GetProccesses(_In_ DWORD processID, _Inout_ HMODULE ahModules[], _In_ int sizeModules, _Out_ DWORD* cModules, _Out_ HANDLE* hProcess);
static void PrintModuleName(_In_ HANDLE processID, _In_ HMODULE* modules);
static void PrintModuleNameAll(_In_ HANDLE hProcess, _In_ HMODULE * modules, _In_ DWORD cModules);
[Duplicate](https://stackoverflow.com/questions/11564148)?或者你只是想要运行的进程? –
编号我试图读取进程内存'ReadProcessMemory()'从某个地址throught exe文件运行的过程,而不是通过'FindWindow()'函数。 –
你确定这个地址属于exe吗(不是dll,不是堆等)? – KonstantinL