Главная страница
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.012 c
3-36567
Erden
2003-11-20 16:18
2003.12.12
TImage ...


3-36525
Лена
2003-11-21 12:43
2003.12.12
Как создать одновременно несколько таблиц в sql


3-36553
Chuha
2003-11-20 22:11
2003.12.12
Файлы+БД


3-36520
Sergey G
2003-11-21 11:42
2003.12.12
Access и два поля как PrimaryKey


1-36601
Дремучий
2003-11-29 00:04
2003.12.12
Редактор свойства типа TImageList