Code: |
unit uvirtalloc;
interface
uses Windows, SysUtils;
function CreateRemoteBuffer(Pid : DWord; Size: Dword): PByte; procedure WriteToRemoteBuffer(Source : PByte; Dest : PByte; Count : Dword);
function ReadRemoteBuffer (Source : PByte; Dest : PByte; Count : Dword): Dword;
procedure DestroyRemoteBuffer;
implementation
var hProcess : THandle; RemoteBufferAddr: PByte; BuffSize : DWord;
function CreateRemoteBuffer; begin RemoteBufferAddr := nil; hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid); if (hProcess = 0) then RaiseLastWin32Error;
Result := VirtualAllocEx(hProcess, nil, Size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Win32Check(Result <> nil); RemoteBufferAddr := Result; BuffSize := Size; end;
procedure WriteToRemoteBuffer; var BytesWritten: Dword; begin if hProcess = 0 then Exit; Win32Check(WriteProcessMemory(hProcess, Dest, Source, Count, BytesWritten)); end;
function ReadRemoteBuffer; begin Result := 0; if hProcess = 0 then Exit;
Win32Check(ReadProcessMemory(hProcess, Source, Dest , Count, Result)); end;
procedure DestroyRemoteBuffer; begin if (hProcess > 0) then begin if Assigned(RemoteBufferAddr) then Win32Check(Boolean(VirtualFreeEx(hProcess, RemoteBufferAddr, 0, MEM_RELEASE))); CloseHandle(hProcess); end; end;
end. |
Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!