Форум: "Начинающим";
Текущий архив: 2011.11.13;
Скачать: [xml.tar.bz2];
ВнизРабота с ReadProcessMemory, как прочитать данные ячейки? Найти похожие ветки
← →
nofical (2011-07-26 18:34) [0]Добрый день уважаемые, подскажите пожалуйста как считать данные из ячейки памяти чужого приложения, перегуглил множество страниц, нашел только функцию ReadProcessMemory, но разобраться никак с ней не могу.
Задача очень проста: Имеется адрес типа 014B6A44, надо прочитать его значение.
Заранее благодарен :)
← →
Игорь Шевченко © (2011-07-26 18:37) [1]
> но разобраться никак с ней не могу
что именно непонятно ?
← →
nofical (2011-07-26 19:00) [2]
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, не понимаю.
← →
nofical (2011-07-26 19:02) [3]Опечатка WriteProcessMemory на ReadProcessMemory
← →
Игорь Шевченко © (2011-07-26 20:41) [4]
> Из того что я понял, данные заносятся в 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 21:19) [5]спасибо разобрался "кто гуглит тот всегда найдет" (С) :)
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 21:43) [6]
> может кому пригодится ...
никому не пригодится
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.11.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c