Pascal の初心者用の質問・相談所 at TECH
[2ch|▼Menu]
821:809
03/12/03 18:39
THINK Pascalで出来るコードリソース呼び出し
 type
  funcOverWriteT = record {関数書換用の型}
    opCode: integer;   {JMP命令オペコード用領域}
    operand: longint;  {JMP先絶対アドレス用領域}
   end;
  funcOWPtr = ^funcOverWriteT;
 var
  fp: funcOWPtr; {ダミー関数アドレス保持}
  h: handle;   {プラグインアドレス保持}
  c: integer;

 function dummy_Func (a, b: integer): integer; {ダミー関数。形式はプラグインと合わせる}
 begin
  dummy_Func := 1 + a + b - 3 + 4;
 end;

 procedure Plugin_Caller (function f (a, b: integer): integer); {Plug-in呼び出し用手続き}
 begin
  c := f(3, 6);
 end;

begin
 h := loadPluginManual; {プラグインアドレス取得。>>810の手続きを関数にしたもの}
 hlock(handle(h));    {プラグインのハンドルロック}
 fp := funcOWPtr(@dummy_Func); {ダミー関数のアドレス取得}
 fp^.opCode := $4ef9;   {68KのJMP命令を上書き}
 fp^.operand := ord4(h^); {プラグインの絶対アドレスを上書き。ハンドル→ポインタを忘れずに}
 c := dummy_Func(3, 6); writeln(c); {失敗。ジャンプテーブルを経由しないので元の関数が呼ばれる。}
 Plugin_Caller(dummy_Func); writeln(c); {プラグイン呼び出し成功!!}


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5497日前に更新/272 KB
担当:undef