Jest jakaś możliwość wysłania stringu za pomocą WriteProcessMemory?
0
0
A może jaśniej/więcej/dokładniej? Co konkretnie chcesz osiagnąć?
0
bo patrz napisałem sobie funkcje ale nie działa ona właściwie dlatego proszę żeby ktoś napisał mi właściwą.
procedure WriteString(address:DWORD; value: string);
var
no:DWORD;
i,j,len: integer;
byt:byte;
nullTerminator:integer;
begin
no := 0;
nullTerminator := $00;
len := length(value);
j := 0;
for i:=0 to len-1 do
begin
byt := byte(value[i]);
WriteProcessMemory(processHandle, ptr(address+j), @byt, 1, no);
inc(j);
end;
WriteProcessMemory(processHandle, ptr(address+j), @nullTerminator, 1, no);
end;
0
zobacz jaki błąd zwraca WriteProcessMemory (wynik getlasterror + google); nie widzę nigdzie nadania prawa do zapisu do pamięci innego procesu; jak pobierasz adres? to nie jest zwykły wskaźnik (popatrz do przykładu w ReadProcessMemory).
poza tym nie kopuij po jednym bajcie, bo jest to bardzo nieefektywne.
0
Procedurka nie moja, ale bardzo fajna :p
procedure MemWriteString(Address : Integer; Value : String; Bytes : Byte = 0);
VAR
NB : LongWord;
Temp : ARRAY [1..255] OF Byte;
I : Byte;
Empty:Integer;
N:DWord;
BEGIN
Empty := $00;
if (Length(Value) < 1) then Exit;
FOR I := 1 TO 255 DO
BEGIN
Temp[I] := Ord(Value[I]);
END;
IF Bytes = 0 THEN
I := Length(Value)
ELSE
I := Bytes;
WriteProcessMemory(IDProcess, Ptr(Address), @Temp[1], I, NB);
WriteProcessMemory(IDProcess, Ptr(Address + Length(Value)), @Empty, 1, N);
END;