Я ищу метод/функцию, которую я могу использовать для получения базового адреса "program.exe"+03262C08 -> B4895A0
. Этот адрес взят из Cheat Engine, и базовый адрес был найден с помощью сканера Pointer. В сканере указателя я могу нажать show module list
, и есть адрес program.exe
, начинающийся с адреса 00400000 program.exe
. Сканер указателя был отсканирован для адреса 09c3000
(адрес, который я хочу получить после базового адреса + много смещений [конечный адрес]). Этот адрес является базовым для определенного объекта, но я не могу добраться до адреса. Я могу получить только базовый адрес exe-файла по адресу 00400000
. Я пытаюсь добавить смещения от указателя 03262C08
(и других), но я все еще не могу добраться до адреса. Я не могу использовать функцию FindWindow()
. Потому что имя программы будет меняться и придерживаться его будет лишним. Я использую OpenProcess(), EnumProcessModulesEx(), GetModuleFileNameEx()
функции. Я пробовал и другие, например GetModuleInformation(),...
, с тем же результатом. GetModuleHandle()
завершился с результатом 0x126 [ERROR_MOD_NOT_FOUND]
. Я использую 64-битную ОС и пытаюсь получить базовый адрес другого процесса. Я вижу все процессы на локальной машине и модули процесса "программы".
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);
ReadProcessMemory()
с определенного адреса через исполняемый файл, работающий как процесс, а не через функцииFindWindow()
. - person Emil Mein   schedule 19.10.2017"program.exe"+03262C08 -> B4895A0
в чит-движке (базовый адрес).B4895A0
я хочу получить, но я получаю только базовый адрес исполняемого файла на0x00400000
. Этот0x00400000
я могу пройти через код и даже могу найти его в CE (полный путь после сканирования указателя: щелкните правой кнопкой мыши адрес -> показать список модулей). Но я не могу связаться с этимB4895A0
с0x400000 + 0x3262C08 !-> 0xB4895A0
. - person Emil Mein   schedule 19.10.2017