C++ 从另一个进程调用函数
我为我的英语提前道歉:D 我如何从进程调用函数,知道指向它的指针 我试过这个: Process.cpp:C++ 从另一个进程调用函数,c++,windows,C++,Windows,我为我的英语提前道歉: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"
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);
}
也许在30年前,这就行了:D:D:D 进程无法访问彼此的内存…每个进程都有自己的内存映像,因此一个进程中的地址0xWhather与另一个进程中的地址0xWhather不包含相同的数据
您需要创建一个库或使用一些进程间通信(IPC)。您所做的是添加指向进程句柄的指针。您需要进程的虚拟地址空间中的地址。为此,请使用
EnumProcessModules
和GetModuleFileNameEx
查找具有所需函数的模块的文件名。(可以是EXE或DLL。)EnumProcessModules
返回一个HMODULES
数组,它们只是指定进程虚拟地址空间中模块的地址。因此,在数组中循环,然后将所需的HMODULE
转换为PBYTE
。然后,添加指向它的函数指针,然后尝试执行
另外,根据您的代码,您将在程序中执行函数。没关系,只要确保如果它需要在目标程序中运行,您需要使用
CreateRemoteThread
在那里运行它。您想在进程上下文中还是在从中读取的进程上下文中执行它?因为第一步需要分析函数,复制机器代码字节并“重新定位”所有地址,使其位于自己进程的虚拟内存空间中。对于第二件事,您需要在另一个进程中打开一个新线程,或者中断一个已经运行的线程并误用它。如果你可以避免的话,这不是你应该使用的东西。如果只是出于好奇,祝你好运。什么?如果你指的是第二条评论,我也看不到。
int main()
{
std::cout << "Hello World!\n";
Attach();
GameText("~r~Test!", 1000, 5);
}
int Read_Int(int address) {
int value;
ReadProcessMemory(phandle, (void*)address, &value, sizeof(value), 0);
return value;
}