2017-10-19 139 views
-2

我正在寻找一种方法/函数,我可以用它来获取基地址"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); 
+0

[Duplicate](https://stackoverflow.com/questions/11564148)?或者你只是想要运行的进程? –

+0

编号我试图读取进程内存'ReadProcessMemory()'从某个地址throught exe文件运行的过程,而不是通过'FindWindow()'函数。 –

+0

你确定这个地址属于exe吗(不是dll,不是堆等)? – KonstantinL

回答

1

Windows已经使用地址空间布局随机化大约十年了,但EXE中的模块基础远远超过这个。简单地忽略它,现在它毫无意义。

别忘了:每个进程都有自己的地址空间。一个过程中的指针在另一个过程中是没有意义的。