Hello. Let me show you a piece of code I worry about:
var
Fout1 :file;
path: string;
old_offset_C34,
left_to_read :dword;
planned_to_read:word;
buf : array[1..65535] of char;
Buffer: pChar;
NumRead, NumWritten : word;
pBytesRead,
pBytesWritten : PDWORD;
begin
{----------------------------------------}
{write memory file to physical file}
{----------------------------------------}
system.Assign (Fout1,Utf8ToAnsi(path));
Rewrite (Fout1,1);
old_offset_C34:=StartPos_ReadProcessMemory;
planned_to_read:=Sizeof(buf);
left_to_read:=code_VirtualSize;
while left_to_read>=planned_to_read do begin
pBytesRead:=nil;
ReadProcessMemory(hProcess,
pDWORD(old_offset_C34),
Buffer,
planned_to_read,
pBytesRead^);
BlockWrite (Fout1,Buf,NumRead,NumWritten);
old_offset_C34:=old_offset_C34+pBytesRead^;
left_to_read:=left_to_read-pBytesRead^;
end;
pBytesRead:=nil;
ReadProcessMemory(hProcess,
pDWORD(old_offset_C34),
Buffer,
left_to_read,
pBytesRead^);
BlockWrite (Fout1,Buf,NumRead,NumWritten);
system.close(Fout1);
{----------------------------------------}
So question is how to connect Buf and Buffer?
Such way as for-loop I think is not elegant (not fast):
for i:=1 to Sizeof(buf) do buf[i]:=Buffer[i-1];