WriteProcessMemory wpisywanie stringu.

0

Jest jakaś możliwość wysłania stringu za pomocą WriteProcessMemory?

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;

1 użytkowników online, w tym zalogowanych: 0, gości: 1