Dziekuję @ŁF sorry ze tak cię <ort>flustruje </ort>ale naprawde niektóre materiały są zbyt niejasne dla laików w temacie procesów i pamięci. Obecnie zastosowałem twoje podpowiedzi wygląda to jakoś ale jeszcez nie tak jakbym chciał, mianowicie dumpuje mi coś ale jakoś mało tego kod wygląda następująco:
procedure TForm1.Button3Click(Sender: TObject);
var
f:file;
h2:thandle;
proc_info: TProcessInformation;
startinfo: TStartupInfo;
memStart : pointer;
memInfo : MEMORY_BASIC_INFORMATION;
buf: array of byte;
len:cardinal;
sComponent:TFileStream;
i,j:integer;
begin
if (opendialog1.FileName<>'') then
begin
assignfile(f,ExtractFilePath(Application.ExeName)+'dump.bin');
rewrite(f);
FillCHar(startinfo, SizeOf(startinfo), 0);
FillCHar(proc_info, SizeOf(proc_info), 0);
startinfo.cb := SizeOf(startinfo);
if CreateProcess(nil,PChar(opendialog1.FileName), nil, nil, FALSE, PROCESS_VM_READ, nil, nil, startinfo, proc_info)then
begin
sleep(1000);
memstart := pointer($20000);
h2 := OpenProcess (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, proc_info.dwProcessId);
while VirtualQueryEx(h2, memstart, memInfo, SizeOf(MEMORY_BASIC_INFORMATION)) = SizeOf(MEMORY_BASIC_INFORMATION) do
begin
if (meminfo.State = MEM_COMMIT) then
begin
setlength(buf,memInfo.RegionSize);
if (ReadProcessMemory(h2, memInfo.BaseAddress, buf, memInfo.RegionSize, len)) then
begin
blockwrite(f,buf,sizeof(buf));
end;
buf := nil;
end;
integer(memstart) := integer(meminfo.BaseAddress) + meminfo.regionsize;
end;
CloseHandle(proc_info.hThread);
end;
closefile(f);
end;
end;
przy opcji CREATE_SUSPENDED dumpuje mi oklo 7,5Kb a przy normalnym okolo 85Kb
przy czym proces zajmuje w pamieci po uruchomieniu przez dumper 22MB a przy cerate_suspended 70kb ,
Przy uruchomieniu normalnym exe w pamieci zajmuje 1,5 MB
gdzie robię błąd moze przy zapisie do pliku badz to nie powinno byc basic memory?