![]() |
Re: MessageBox ersetzen
100%: die Parameter müssen übereinstimmen (denk ich mal)
und so wie das aussieht überschreibt man damit die ersten Bytes der Funktion ... also mit einem Sprung in die neue Funktion ... demnach könnte man damit alles ersetzten, zerstört damit aber die Originalfunktion, diese ist dann also nicht mehr nutzbar? mir fällt grad ein, daß an Posiion @MessageBoxA doch auch nur ein Jump steht :gruebel: @Bärchen: wirde es dann denn nicht ausreichen, wenn du den Jump-Befehl stehen läßt und nur die Adresse änderst? |
Re: MessageBox ersetzen
Ich habs mal ausprobiert und irgendwie bekomme ich immer eine Schutzverletzung. Hast du vielleicht ein Beispielprojekt?
|
Re: MessageBox ersetzen
Liste der Anhänge anzeigen (Anzahl: 1)
Warum dieser Umstand und dieses rumgehacke im Quellcode? Du hast doch selber eine Möglichkeit gefunden (MessageboxTimeOut) und ich habe dir noch eine weitere gezeigt? Warum nimmst du nicht eine davon, wenn du schon nicht alles in ein Log schreiben willst.
Im Anhang noch mal beide Versionen in einer Demo von mir. |
Re: MessageBox ersetzen
Zitat:
Also Idealer Weise so:
Delphi-Quellcode:
@Codewalker: Wenn du eine AV bekommst ist dein Funktionrumpf nicht mit dem originalen Identisch. Die Parameter müssen gleich sein und auch die Aufrufkonvention. Wenn du zum Beispiel "stdcall" weglässt geht es schon schief.
var lLib: Cardinal;
begin lLib := LoadLibrary('user32.dll'); if (lLib <> 0) then begin ReplaceFunktion(GetProcAddress(lLib, 'MessageBoxA'), @MessageBoxB); FreeLibrary(lLIb); end; end; Im falle von MessageBoxA bzw. MessageBox muss dein Funktionskopf exakt so aussehen (ausgenommen der Funktionsname):
Delphi-Quellcode:
Es darf also keine Methode etc. sein sondern muss eben exakt mit der declaration der Originalfunktion übereinstimmen.
function Funktionsname(AHandle: HWND; AMsg, ATitle: PChar; uType: Cardinal): Integer; stdcall;
Das die Originale Funktion dabei zerstört wird ist richtig. Aus dem Grund hab ich vor das ganze in eine Klasse zu packen so das man eine Funktion ersetzen kann und später auch wieder herstellen (so das beim ersetzen der Teil welcher überschrieben wird, gesichert wird). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz