Просмотр содержимого любого блока памяти выбранного процесса
не могу понять что от меня требуют.
Программа, формирующая список всех процессов, выполняющихся на данном компьютере и позволяющая просматривать содержимое любого блока памяти выбранного процесса (данные выводятся в символьной форме).
Вывожу список всех процессов:
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 шт):
https://rouse.drkb.ru/winapi.php#pmm2 показывает содержимое блока памяти
Вы уже делаете VirtualQueryEx, после этого можно сделать ReadProcessData в свой буфер и показать, что там лежит (файл udump.pas и т.д.)