Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

Чтение из блока памяти, выделенной в чужом адр. пространстве   Найти похожие ветки 

 
Volia ©   (2003-09-12 01:31) [0]

Не получается читать из буфера, расположенного в адресном пространстве чужого процесса
Вот часть программы:

var ProcHndl,ProcID,i: dword;
pMyAddress: pointer;
Str1,Str2: String;
begin
ProcID:=xyz //Идентификатор нужного процесса
str1:="AAAAAAAA";
str2:="BBBBBBBB";
prochndl:=openprocess(PROCESS_ALL_ACCESS,TRUE,ProcID);
pMyAddress:=VirtualAllocEx(ProcHndl,nil,50,MEM_RESERVE+MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(ProcHndl,pMyAddress,pchar(Str1),50,i);
ReadProcessMemory(ProcHndl,pMyAddress,pchar(Str2),50,i);

Содержание Str2 не меняется, ReadProcessMemory возвращает FALSE, GetLastError- ошибку 998 (Invalid access to memory location. ERROR_NOACCESS ). При этом WriteProcessMemory возвращает TRUE.
В чем может быть ошибка?


 
Digitman ©   (2003-09-12 09:53) [1]

var ProcHndl,ProcID,i: dword;
pMyAddress: pointer;
Str1,Str2: String;
begin
ProcID:=xyz //Идентификатор нужного процесса
str1:="AAAAAAAA";
SetLength(str2, Length(Str1)); // !!!!!!!!!!!!!!!!!!!!!!
prochndl:=openprocess(PROCESS_ALL_ACCESS,TRUE,ProcID);
pMyAddress:=VirtualAllocEx(ProcHndl,nil,Length(Str1),MEM_RESERVE+MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(ProcHndl,pMyAddress,pchar(Str1),Length(Str1),i);
ReadProcessMemory(ProcHndl,pMyAddress,pchar(Str2),Length(Str1),i);


 
VMcL ©   (2003-09-12 13:28) [2]

Или так:

Str2 := "BBBBBBBB";
UniqueString(Str2);


 
guest   (2003-09-13 14:34) [3]

помни, что тебе нужны привилегии для чтения из процесса

если ты SYSTEM то их можно слммзить с WinLogon :)


 
(3223)jab   (2003-09-29 17:40) [4]

В 98 винде у меня всё работало так:

procedure TForm1.Button5Click(Sender: TObject);
var
ProcessHandle:THandle;
ProcessID,Address:Integer;
TheWindow:HWND;
buf:array [0..3] of Byte;
Size:Word;
im:DWORD;
begin
TheWindow:=FindWindow(nil, PChar(Edit1.Text));
GetWindowThreadProcessID(TheWindow,@ProcessID);
ProcessHandle:=OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
Address:=StrToInt("$"+Edit2.Text);
buf[0]:=StrToInt("$"+Edit4.Text);
buf[1]:=StrToInt("$"+Edit6.Text);
buf[2]:=StrToInt("$"+Edit7.Text);
buf[3]:=StrToInt("$"+Edit8.Text);
Size:=sizeof(buf);
im:=0;
WriteProcessMemory(ProcessHandle,Pointer(Address),@buf,Size,im);
CloseHandle(ProcessHandle);
end;

Может поможет чем поможет....


 
VMcL ©   (2003-10-02 14:28) [5]

>(3223)jab (29.09.03 17:40) [4]
Не совсем по теме.

У Volia © (12.09.03 01:31) была проблема вот в этом:
str2:="BBBBBBBB";
То есть переменная Str2 указывала на данные, находящиеся в странице с запретом на изменение (например, PAGE_READONLY мли PAGE_EXECUTE_READ).


 
Verg ©   (2003-10-02 14:51) [6]


> str2:=" BBBBBBBB";
> prochndl:=openprocess(PROCESS_ALL_ACCESS,TRUE,ProcID);
> pMyAddress:=VirtualAllocEx(ProcHndl,nil,50,MEM_RESERVE+MEM_COMMIT,PAGE_READWRITE);
> WriteProcessMemory(ProcHndl,pMyAddress,pchar(Str1),50,i);
> ReadProcessMemory(ProcHndl,pMyAddress,pchar(Str2), 50,i);


Размер str2 - 8 байтов, а читать в нее пытаешься аж 50


 
VMcL ©   (2003-10-16 18:33) [7]

>Verg © (02.10.03 14:51) [6]

И это тоже.



Страницы: 1 вся ветка

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
1-36727
Tetragrammaton
2003-12-02 12:03
2003.12.12
Перерисовка окна


4-36904
novenkiy
2003-10-09 15:25
2003.12.12
Вроде HotKey, а вроде и нет...


3-36502
Элина
2003-11-22 17:59
2003.12.12
Как в SQL проверить поле на нулевое значение


1-36699
A JI E LLI A
2003-11-29 21:29
2003.12.12
Как реализовать возведение числа в произвольную степень?


1-36647
Вадим
2003-12-03 02:28
2003.12.12
Объеденить несколько форм с настройками в одну