На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Win Api / Доступ к памяти чужой программы. Подскажите пожалуйста как можно определить какой участок памяти занимает запущеная ранее программа и ее данные, и получить доступ к памяти чужой программы(процесса). Сделать домашней страницей Добавить в избранное Написать писмо

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


1. Можно вопользоваться функциями ReadProcessMemory/WriteProcessMemory.

Пример использования приведен ниже:

Файл Researcher.dpr


program Researcher;

{$APPTYPE CONSOLE}

uses Windows, SysUtils;

const
 BUFFER_SIZE = 4096;
 BUFFER_LIMIT = BUFFER_SIZE - 1;
 ReadBase: Pointer = Pointer($00401000);

var
 SI: TStartupInfo;
 PI: TProcessInformation;
 ExeFile: string = 'GuineaPig.exe';
 Buf: array [0..BUFFER_LIMIT] of Byte;
 ReadBytes: Cardinal;
 I: Integer;

begin
 try

   if ParamCount > 0 then ExeFile := ParamStr(1);

   FillChar(SI, SizeOf(SI), $00);
   FillChar(PI, SizeOf(PI), $00);
   SI.cb := SizeOf(SI);

   if not CreateProcess(PChar(ExeFile), '', nil, nil, False, 0, nil, nil, SI, PI) then
     RaiseLastOSError;

   try
     if not ReadProcessMemory(PI.hProcess, ReadBase, @Buf, BUFFER_SIZE, ReadBytes) then
       RaiseLastOSError;

     WriteLn('Read ', ReadBytes, ' bytes:');
     for I := 0 to ReadBytes-1 do
     begin
       Write(IntToHex(Buf[I], 2));
       if (I+1) mod 16 = 0
         then WriteLn
         else Write(' ');
     end;  
   finally
     CloseHandle(PI.hProcess);
     CloseHandle(PI.hThread);
   end;

 except
   on E: EXception do
   begin
     WriteLn(E.Message);
     Halt(1);
   end;  
 end;  
end.


Файл GuineaPig.dpr

program GuineaPig;

{$APPTYPE CONSOLE}

uses Windows;

begin
 Write('Processing...');
 Sleep(1000);
 WriteLn('OK');
end.


2. Второй вариант состоит во внедрении DLL в адресное пространство чужого процесса. В этом
случае вы получите поток, выполняющийся в чужом адресном пространстве. Дынный путь описан в
книге Дж. Рихтера "Windows для профессионалов".

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz