DjDram
18-07-2009, 22:05
Не могу решить задачку нужно считать строку из памяти процесса запущенной программы.
RVA строки $0036D0C8 нужен ведь RVA не VA
Процедура выглядит следующим образом, для проверки значений заносил их в edit
procedure TForm1.Button1Click(Sender: TObject);
var
hProc, PID, numberRead : DWORD;
hWnd : THandle; // Хэндл окна чата
IpBuf : string; // буфер куда поместиться наше значение
ipBase: ^dword; // точка входа в памяти
begin
hWnd:=findwindow('TfChatClient',nil); /// получаем хэндл окна программы
Edit1.Text:=inttostr(hWnd); // заносим в edit Handle
GetWindowThreadProcessId(hWnd, @PID); //получаем pid зная хэндл окошка интересующей нас программы
Edit2.Text:=inttostr(PID); // заносим в edit ID
hProc:=OpenProcess(PROCESS_VM_READ, False, PID); // подключаемся к процессу зная его ID
try
if hProc <> 0 then // условие проверки подключения к процессу
begin
Edit3.Text:=inttostr(hProc); // заносим в edit Process
ipbuf:=' '; // очищаем буфер
SetLength(ipbuf, 4); // устанавливаем длинну буфера
ipBase:=ptr($0036D0C8); // RVA слова в памяти
ReadProcessMemory(hProc, ipBase, Addr(ipbuf), 4, numberRead); // чтение из памяти строки
Edit4.Text:=PCHAR(ipbuf); // заносим в edit Buffer
end;
finally
CloseHandle(hProc); // отсоединяемся от процесса
end;
end;
В результате получилось следующее хэндл, pid process считываються идеально, а вот переменная ipbuf куда должно занестись значение выдыдаёт какуето ерунду что не так где ошибки?
RVA строки $0036D0C8 нужен ведь RVA не VA
Процедура выглядит следующим образом, для проверки значений заносил их в edit
procedure TForm1.Button1Click(Sender: TObject);
var
hProc, PID, numberRead : DWORD;
hWnd : THandle; // Хэндл окна чата
IpBuf : string; // буфер куда поместиться наше значение
ipBase: ^dword; // точка входа в памяти
begin
hWnd:=findwindow('TfChatClient',nil); /// получаем хэндл окна программы
Edit1.Text:=inttostr(hWnd); // заносим в edit Handle
GetWindowThreadProcessId(hWnd, @PID); //получаем pid зная хэндл окошка интересующей нас программы
Edit2.Text:=inttostr(PID); // заносим в edit ID
hProc:=OpenProcess(PROCESS_VM_READ, False, PID); // подключаемся к процессу зная его ID
try
if hProc <> 0 then // условие проверки подключения к процессу
begin
Edit3.Text:=inttostr(hProc); // заносим в edit Process
ipbuf:=' '; // очищаем буфер
SetLength(ipbuf, 4); // устанавливаем длинну буфера
ipBase:=ptr($0036D0C8); // RVA слова в памяти
ReadProcessMemory(hProc, ipBase, Addr(ipbuf), 4, numberRead); // чтение из памяти строки
Edit4.Text:=PCHAR(ipbuf); // заносим в edit Buffer
end;
finally
CloseHandle(hProc); // отсоединяемся от процесса
end;
end;
В результате получилось следующее хэндл, pid process считываються идеально, а вот переменная ipbuf куда должно занестись значение выдыдаёт какуето ерунду что не так где ошибки?