Delphi-Quellcode:
unit Unit1;
interface
uses
classes;
type
TMyClass =
class
strict private
procedure BuggyMethod;
end;
TMyClassHack =
class helper
for TMyClass
public
function GetBuggyMethodAddress: Pointer;
end;
procedure Test;
implementation
uses
SysUtils;
{ TmyClassHack }
function TMyClassHack.GetBuggyMethodAddress: Pointer;
asm
lea eax, [0+TMyClass.BuggyMethod]
end;
{ TMyClass }
procedure TMyClass.BuggyMethod;
begin
writeln('
hello');
end;
procedure Test;
var
Obj: TMyClass;
Addr: Pointer;
begin
Obj := TMyClass.Create;
writeln(format('
%p',[Obj.GetBuggyMethodAddress]));
Addr := Obj.GetBuggyMethodAddress;
asm
call Addr
end;
Obj.Free;
end;
end.
Das funktioniert bei mir. Ich weiß allerdings nicht genau was du damit meinst:
Zitat:
Eine "Hack"/"Dummy"-Klasse kommt in diesem Fall nicht in Frage, da der Code für mehrere Versionen der Klasse arbeiten soll.