![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Read/WriteProcessMemory
Tonich © (2005-08-24 16:42:00)начить делаю так...
HRProcess := OpenProcess(
PROCESS_CREATE_THREAD or
PROCESS_VM_OPERATION or
PROCESS_VM_WRITE,
false,
PID
);
if HRProcess = 0 then
begin
MessageBox();
Exit;
end;
p_mem := VirtualAllocEx(HRProcess,nil,sizeof(str_proba),MEM_COMMIT,PAGE_READWRITE);
if p_mem = nil then
begin
MessageBox();
Exit;
end;
if not WriteProcessMemory(HRProcess,p_mem,@str_proba, sizeof(str_proba),writebytes) then
begin
MessageBox();
Exit;
end;
if not ReadProcessMemory(HRProcess,p_mem,@BufferS,SIZEOF(BufferS),readbytes) then
begin
MessageBox();
Exit;
end;
чего это гад не хочет читать то что я туда записал в частности str_proba ???
Tonich (2005-08-24 17:22:00) [21]
> alpet © (24.08.05 17:19) [16]
ну эт я как-то понял)
Tonich (2005-08-24 17:21:00) [22]хм странно я когда резервирую грю ему PAGE_READWRITE
alpet (2005-08-24 17:20:00) [23]Попробуй на время отладки присвоить HRProcess результат GetCurrentProcess.
alpet (2005-08-24 17:19:00) [24]Tonich © (24.08.05 17:16) [13]
ERROR_ACCESS_DENIED - наводит на размышления, что нельзя прочитать/записать с адрес p_mem в АП несчастного процесса.
begin...end (2005-08-24 17:18:00) [25]> Tonich © (24.08.05 17:16) [13]
SysErrorMessage(5) или [8]
BiN (2005-08-24 17:18:00) [26]Access denied
Tonich (2005-08-24 17:16:00) [27]всеравно нихрена не читает
GetLastError() = 5
Digitman (2005-08-24 17:12:00) [28]
> хмм, а что есть принципиальная разница в том как объявить
> эту строку
представь себе - есть !
alpet (2005-08-24 17:11:00) [29]Tonich © (24.08.05 17:05) [9]
Взялся за API, учись работать с ASCIIZ строками. С ними порой удобнее обращаться бывает. В данном случае это определение строки из 256 байт.
var s: string
str_proba: array [0..40] of char;
....
s := 'Window Text';
StrPCopy (@str_proba, s);
WriteProcessMemory (..., @str_proba)
Digitman (2005-08-24 17:08:00) [30]
> Tonich © (24.08.05 16:59) [6]
> ReadProcessMemory(...)
> функция возвращает false
если функция - это "гад", возвративший вместо вожделенного True "гадское" False, то чуть ли не на каждую "гадскую" ф-цию (ДАННАЯ - в т.ч.) существует "гадское противоядие" - ф-ция GetLastError()
Tonich (2005-08-24 17:05:00) [31]
> alpet © (24.08.05 17:02) [7]
хмм, а что есть принципиальная разница в том как объявить эту строку
begin...end (2005-08-24 17:03:00) [32]> Tonich © (24.08.05 16:59) [6]
> и функция возвращает false
Win32Check(ReadProcessMemory(...))
alpet (2005-08-24 17:02:00) [33]var str_proba: array [BYTE] of char;
...
ReadProcessMemory (hProcess, p_mem, @str_proba, 256, writed);
WriteProcessMemory (hProcess, p_mem, @str_proba, 256, writed);
Tonich (2005-08-24 16:59:00) [34]блин всеравно
в
ReadProcessMemory(...)
ReadBytes = 0
и функция возвращает false
Tonich (2005-08-24 16:53:00) [35]
> Digitman © (24.08.05 16:51) [3]
хмм) гад сейчас отсуцтвует, поэтому пришлось спрашивать тута)))
begin...end (2005-08-24 16:53:00) [36]> Tonich © (24.08.05 16:49) [2]
Неправильно записываете, неправильно читаете.
Адрес тела строки: @S[1] или Pointer(S), а не @S.
Размер тела строки: Length(S), а не sizeof(S).
Перед чтением в строку не забываем установить нужную длину с помощью SetLength.
Digitman (2005-08-24 16:51:00) [37]
> чего это гад не хочет
а ты у "гада" спросил, почему он "не хочет" ?
нет, не спросил.
не сподобился.
лень тебе.
тогда "чего ж тебе надобно, старче ?" (с)
Tonich (2005-08-24 16:49:00) [38]str_proba:string
begin...end (2005-08-24 16:48:00) [39]Что такое str_proba?