Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-36679
SERG
2003-12-03 02:38
2003.12.12
ДИНАМИЧЕСКОЕ МЕНЮ


4-36905
Duncann
2003-10-21 11:57
2003.12.12
Как правильно передать параметры в функцию длл?


8-36768
Norlin
2003-08-09 21:17
2003.12.12
Как на ходу грузить картинки из DLL в Игру ?


1-36756
Ahmad K
2003-12-01 18:45
2003.12.12
HTML & DOC.


1-36641
AlexV
2003-11-25 08:00
2003.12.12
Как подключиться и использовать OLE-объект Microsoft Outlook ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский