Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с ReadProcessMemory, как прочитать данные ячейки? [D6]


nofical ©   (2011-07-26 18:34:00) 

Добрый день уважаемые, подскажите пожалуйста как считать данные из ячейки памяти чужого приложения, перегуглил множество страниц, нашел только функцию ReadProcessMemory, но разобраться никак с ней не могу.

Задача очень проста: Имеется адрес типа 014B6A44, надо прочитать его значение.

Заранее благодарен :)


Игорь Шевченко   (2011-07-26 21:43:00) [1]


> может кому пригодится ...


никому не пригодится


nofical   (2011-07-26 21:19:00) [2]

спасибо разобрался "кто гуглит тот всегда найдет" (С) :)

const
Offset = $00000000;

var
Wnd: HWND;
ThreadId, ProcessId, Hdl: Cardinal;
BytesRead: Cardinal;
Value: Integer;

...

Wnd := FindWindow(nil, 'Имя программы');
ThreadId := GetWindowThreadProcessId(Wnd, @ProcessId);
Hdl := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
ReadProcessMemory(Hdl, Pointer(Offset), @Value, 4, BytesRead);

// вывод
ShowMessage(IntToStr(value));

CloseHandle(hdl);


Выкладываю код, может кому пригодится ...


Игорь Шевченко   (2011-07-26 20:41:00) [3]


> Из того что я понял, данные заносятся в wBuff


Как же 4 байта могут поместиться в 1 байт ?


> ReadProcessMemory(pHandle, ptr($014B6A44), @wBuff, 4, temp);


здесь заказано чтение четырех байт


> var
>  wBuff: byte;


здесь объявлен один байт. Нестыковка.


> только вот как вытащить из нее данные в обычну переменную
> типа string или integer, не понимаю


Если Integer, то и переменную, куда читаешь, нужно объявить как Integer.

например,
var
 wBuff: Integer;

если "типа string", то изучить функцию SetLength, узнать длину строки в памяти чужого процесса, ну и, собственно, читать в PChar(string_var)


nofical   (2011-07-26 19:02:00) [4]

Опечатка WriteProcessMemory на ReadProcessMemory


nofical   (2011-07-26 19:00:00) [5]

procedure TForm1.Button4Click(Sender: TObject);
var
 wBuff: byte;
 wHandle: integer;
 tHandle, ProcessID, pHandle, temp: cardinal;
begin
 wHandle := FindWindow(nil, 'Áåçûìÿííûé - Áëîêíîò');
 if wHandle 0 then
 begin
   tHandle := GetWindowThreadProcessId(wHandle, @ProcessID);
   pHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
   WriteProcessMemory(pHandle, ptr($014B6A44), @wBuff, 4, temp);
   //
   CloseHandle(pHandle);
 end
   else
     ShowMessage('not handle');
end;


Из того что я понял, данные заносятся в wBuff, только вот как вытащить из нее данные в обычну переменную типа string или integer, не понимаю.


Игорь Шевченко   (2011-07-26 18:37:00) [6]


> но разобраться никак с ней не могу


что именно непонятно ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо