Я заранее прошу прощения за мой английский: D
Как я могу вызвать функцию из процесса, зная указатель на нее?
Я пробовал это:
Process.cpp:
DWORD pid;
HWND hwnd;
HANDLE phandle;
void Attach() {
hwnd = FindWindow(NULL, L"GTA:SA:MP");
if (!hwnd) {
cout << "Process is not found" << endl;
system("pause");
}
else if (hwnd) {
cout << "Process was successfully loaded" << endl;
GetWindowThreadProcessId(hwnd, &pid);
phandle = OpenProcess(PROCESS_VM_READ, 0, pid);
}
else
{
cout << "Error 0x01" << endl;
system("pause");
}
}
void GameText(const char* szText, int iTime, signed int iStyle)
{
typedef void(__stdcall* GameText_t)(const char*, int, signed int);
GameText_t pGameText = (GameText_t)((char*)phandle + 0x69F2B0);
return pGameText(szText, iTime, iStyle);
}
main.cpp:
int main()
{
std::cout << "Hello World!\n";
Attach();
GameText("~r~Test!", 1000, 5);
}
И я получаю следующее исключение:
Исключение было сгенерировано по адресу 0x006EF7B6в файле wh_mta.exe: 0xC0000005: нарушение прав доступа во время выполнения по адресу 0x006EF7B6.
Почему это происходит?Как я могу вызвать функцию по указателю через HANDLE?
PS
Чтение целого числа через HANDLE прекрасно работает.
int Read_Int(int address) {
int value;
ReadProcessMemory(phandle, (void*)address, &value, sizeof(value), 0);
return value;
}