BOOL WriteProcessMemory( HANDLE hProcess, // 进程的句柄(可由OpenProcess函数返回) LPVOID lpBaseAddress, // 进程地址 LPVOID lpBuffer, //数据当前存放地址 DWORD nSize, //数据的长度 LPDWORD lpNumberOfBytesWritten //指定要写入的数据类型 ); //返回值:非零值代表成功
用法如下:
var
h:HWND;
tid,hProcess:Thandle;
Calladdr:Pointer;
writeByte:DWORD;
begin
h:=findwindow(nil,'Element Client');
windows.GetWindowThreadProcessId(h,tid);
hProcess:=windows.OpenProcess(windows.PROCESS_ALL_ACCESS,false,tid);
//在游戏进程里分配内存空间
Calladdr:=VirtualAllocEx(hProcess,nil,windows.MAX_PATH,windows.MEM_COMMIT OR windows.MEM_RESERVE,windows.PAGE_EXECUTE_READWRITE);
//在游戏内存空间里写入代码
WriteProcessMemory(hProcess,Calladdr,@sitCall,MAX_PATH,writeByte);
//调用远程代码
CreateRemoteThread(hProcess,nil,0,Calladdr,nil,0,writeByte);
VirtualFreeEx(hProcess,nil,windows.MAX_PATH,windows.MEM_COMMIT OR windows.MEM_RESERVE);
end;
浙公网安备 33010602011771号