Просмотр содержимого любого блока памяти выбранного процесса

не могу понять что от меня требуют.

Программа, формирующая список всех процессов, выполняющихся на данном компьютере и позволяющая просматривать содержимое любого блока памяти выбранного процесса (данные выводятся в символьной форме).

Вывожу список всех процессов:

procedure TForm1.OnCreate(Sender: TObject);
VAR
  x,code:Integer;
  s:String;
begin
  StringGrid1.Cells[0,0]:='#';
  StringGrid1.Cells[1,0]:='Name file';
  StringGrid1.Cells[2,0]:='Process ID';
  StringGrid1.Cells[3,0]:='Number of threads';
  StringGrid1.Cells[4,0]:='Base Priority';
  pe32.dwSize:=SizeOf(tProcessEntry32);
  x:=1;
  hProcess:=CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS,0);
  Process32First(hProcess,pe32);
  str(pe32.th32ProcessID,s);
  val(s,pe32.th32ProcessID,code);
  Repeat
    StringGrid1.Cells[0,x]:=IntToStr(x);
    StringGrid1.Cells[1,x]:=pe32.szExeFile;
    StringGrid1.Cells[2,x]:=IntToStr(pe32.th32ProcessID);
    StringGrid1.Cells[3,x]:=IntToStr(pe32.cntThreads);
    StringGrid1.Cells[4,x]:=IntToStr(pe32.pcpriClassBase);
    x:=x+1;
    StringGrid1.RowCount:=x;
  until Process32Next(hProcess,pe32)=False;
end;

Что бы просмотреть любой блок памяти пишу, следующее:

procedure TForm1.Button4Click(Sender: TObject);
var
  s,s1:Integer;
  l1 :string;
  proc:THandle;
  vi: DWORD;
  mbi:TMemoryBasicInformation;
begin
  s:= StrToInt(Edit1.Text);
  s1:=  StrToInt(Edit2.Text);
  proc := OpenProcess(PROCESS_ALL_ACCESS, TRUE, s);
  while VirtualQueryEx(proc, pointer(s1), mbi, sizeof(TMemoryBasicInformation)) <> 0 do
  begin
l1:=   Concat('BaseAddress: ', IntTostr(NativeUInt(mbi.BaseAddress)), ', AllocationBase: ', IntTostr(NativeUInt(mbi.AllocationBase)), ', RegionSize: ', IntToStr(mbi.RegionSize));
Memo1.Lines.Add(l1);
  s1 := s1 + mbi.RegionSize;
end; end;

Мне сказали, что это совсем не то, что требуется, нужно через VirtualAlloc и тут стопр, как это сделать? Спасибо за ранее

Ответ: Преподаватель "тук-тук", оперирует не очень понятными словами. Смысл задачи сделать дамп памяти)


Ответы (1 шт):

Автор решения: MBo

https://rouse.drkb.ru/winapi.php#pmm2 показывает содержимое блока памяти

Вы уже делаете VirtualQueryEx, после этого можно сделать ReadProcessData в свой буфер и показать, что там лежит (файл udump.pas и т.д.)

→ Ссылка