Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1310718132
lesstab
2011-07-15 12:22
2011.11.13
Вопрос опытным программистам


1-1273069609
Zoom
2010-05-05 18:26
2011.11.13
Почему перестает работать кнопка "Свернуть" ?


2-1311321505
ixen
2011-07-22 11:58
2011.11.13
Как узнать тип поля?


15-1310627957
R_R
2011-07-14 11:19
2011.11.13
Как работать с Windows VDS, что можно почитать?


2-1311205811
alexdn
2011-07-21 03:50
2011.11.13
Считывать построчно тхт





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский