Einzelnen Beitrag anzeigen

MartinA

Registriert seit: 27. Aug 2003
13 Beiträge
 
#6

Re: In den Speicher schreiben

  Alt 6. Okt 2004, 13:50
Zitat von Luckie:
Kapier ich nicht. Sinnvoll ändern kan nman doch sowie so nur Bytes von Daten und über die habe ich doch sowieso in meinem Programm die volle Kontrolle.
Ich gebe Dir vollkommen recht, wenn man von dem Standpunkt ausgeht, das es sich um Variablen handelt die man Programatisch verändern kann.

z.B
Code:
 A := 10;
A soll nun 11 werden.
 A := 11;
Ist allemal sinnvoller als
 WriteByte($woauchimmer,$B);
Wenn ich jedoch dynamisch den Code erweitern ohne jeweils alles neu zu Compilieren bzw. neu Auszuliefern hat man kaum eine andere Möglichkeit.

Pseudocode:
Code:
 dbgMakeJump(hxInMSGProcBase, DWord(@InMsgProc) + 2, 0);
 dbgMakeJump(DWord(@InMsgProc), hxInMSGProcBase-5, 0);
   :
   :
procedure dbgMakeJump(hxZielAddr, hxJumpAddr, NOPS: DWord);
Var
 Buffer : Array[1..5] of Byte;
 Data   : DWord;
 X      : Byte;
begin
  Data:= hxZielAddr - (hxJumpAddr + 5);
  Move(Data, Buffer[2], 4);
  Buffer[1]:= $E9;
  WriteSecureBuffer(hxJumpAddr, @Buffer, 5);
  For X:= 1 to NOPS do WriteSecureByte(hxJumpAddr + 4 + X, $90);
end;
Vorstehendender Code befindet sich in einer Debug-DLL die nur geladen wird wenn Sie da ist. Ist dem So wird eine bestimmte Routine der Exe auf eine Funktion der DLL umgebogen. Im Prinzip kommt das einen "Funktionshook" recht nahe.
Eine andere Einsatzmöglichkeit währe es auch z.B. einen Durchlaufszähler auf ähnliche Weise zu verändern. Nochmal deutlich hervorheben, will ich, daß die Änderungen aus der DLL kommen und im Hauptprogramm vorgenommen werden. Die Änderung im Hauptprogramm selbst auf diese weise ist, wie bereits richtig festgestellt wurde, relativ sinnlos.

Gruß
Martin
ALT +F4
  Mit Zitat antworten Zitat