3

Delphiの組み込み関数を自分のバージョンのオンザフライに置き換えようとしました。

function ShortCutToTextOverride(ShortCut: TShortCut): string;
begin
  if SomeCondition then
    Result := Menus.ShortCutToText // after patching the pointer equals ShortCutToTextOverride
  else
  begin
    // My own code goes here
  end;
end;

FastcodeAddressPatch(@Menus.ShortCutToText, @ShortCutToTextOverride);

パッチを適用すると、元の機能にアクセスできなくなります。とにかくアクセス可能ですか?

4

1 に答える 1

6

恐れ入りますが、最初のバイトは新しい関数へのジャンプによって上書きされます。

KOLDetours.pasを使用できます。トランポリンへのポインターを返します(迂回によって上書きされる元の最初の数バイト)。 http://code.google.com/p/asmprofiler/source/browse/trunk/SRC/KOLDetours.pas

例えば:

type
  TNowFunction = function:TDatetime;
var
  OrgNow: TNowFunction;
function NowExact: TDatetime;
begin
  //exact time using QueryPerformanceCounter
end; 

initialization
  OrgNow := KOLDetours.InterceptCreate(@Now, @NowExact);
  Now()     -> executes NowExact() 
  OrgNow()  -> executes original Now() before the hook 
于 2012-05-15T09:32:31.890 に答える