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

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

Чтение из памяти другой программы


Страницы:   1 2

Хинт ©   (2005-08-31 17:55:00) 

Необходимо прочитать 2 байта из памяти другой программы. Нашел нужный адрес. В процессе работы программы он остается неизменным (изменяю в программе значение, смотрю в памяти и значения совпадают). Перезапустив программу, замечаю, что адрес уже изменился и нужные мне значения лежат уже в другом месте. Возможно ли как-нибудь определять нужный адрес? Ведь программа как-то узнает откуда ей брать значения своих переменных? Насколько я понимаю мне надо найти указатель, но как это сделать я не знаю... Помогите разобраться.


Defunct   (2005-08-31 19:30:00) [21]

> Не проще ли воспользоваться функцией FindWindow для определения PID?

Может быть, только в цикле imho есть свои прелести как например возможность использования LowerCase.


> Только оказалось, что адрес меняется :(
Меняется локальный адрес переменной внутри процесса?


Piter   (2005-08-31 19:29:00) [22]

Хинт ©   (31.08.05 17:55)

объясни, зачем тебе нужно читать значения из памяти другого процесса?


Tonich   (2005-08-31 19:29:00) [23]


> Хинт ©   (31.08.05 19:22) [4]
 опередил )))


Piter   (2005-08-31 19:28:00) [24]

Defunct ©   (31.08.05 19:19) [3]
Возможно, тут есть народ кто знает как получить указатель на память процесса имея его Id.


:)))


Tonich   (2005-08-31 19:28:00) [25]

ну читать из  чужого АП можно так


BOOL READProcessMemory( HANDLE hProcess, PVOID pvAddressRemote, PVOTD pvBufferLocal, DWOHD dwSize, PDWORD pdwNumBytesWritten);


где hProcess хендел чужого процесса


hProcess = OpenProcess(
PROCESS_CREATE THREAD or // для CreateRemoteThread
PROCESS_VM_OPERATION or // для VirtualAllocEx/VirtualFreeEx
PROCESS_VM_READ, // для READProcessMemory
FALSE, dwProcessId);


а вот pvAddressRemote и есть адрес блока данных (ну которые хочешь прочитать)


Хинт   (2005-08-31 19:22:00) [26]

Спасибо за участие в проблеме, но все это я уже сделал, в том числе считывание переменных. Только оказалось, что адрес меняется :(

PS: Не проще ли воспользоваться функцией FindWindow для определения PID?


Defunct   (2005-08-31 19:19:00) [27]

Ясно.
Могу помочь только отыскать Id процесса. Дальше к сожалению, я не углублялся. Возможно, тут есть народ кто знает как получить указатель на память процесса имея его Id.

function GetProcessIdByWndCaption( ACaption : String ): Cardinal;
var
 Hw : HWND;
 S  : String;
 I  : Integer;
begin
 Result := 0;
 HW := GetActiveWindow;
 HW := GetWindow(HW, GW_HWNDFIRST);
 repeat
   SetLength( S, 256 );
   HW:=GetWindow(HW, GW_HWNDNEXT);
   GetWindowText(HW, @S[1], 256);
   if Pos( ACaption, S) <> 0 then
   begin
     GetWindowThreadProcessId( HW, Result );
     Break
   end;
 until HW = 0;
end;


Хинт   (2005-08-31 18:18:00) [28]

Чужая. Исходных кодов нет. Только EXE файл.


Defunct   (2005-08-31 18:15:00) [29]

Хинт ©   (31.08.05 17:55)

Программа ваша или чужая?


Страницы:   1 2

Наверх

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