Skip to content
Ryota Shioya edited this page Mar 24, 2022 · 2 revisions

dst/仕様/拡張/Hook.md

はじめに

  • 鬼斬では,ユーザーによるモジュールを拡張するための仕組みとしてHook と呼ぶ仕組みを用意している.
    • Hook は,フェッチやリネームと言ったシミュレータ本来の処理を横取り(フック)するための仕組みである.
    • 任意のオブジェクトとメソッドのペアをHook に登録することにより,本来の処理を横取りできる.
    • Hook を用いることにより,ユーザーはモジュールに直接手を加えることなく,シミュレータの拡張を行える.
    • 主な実装は/src/Sim/Hook/Hook.h にある

動作

  • 各箇所に儲けられたHook オブジェクトに対し,
    • Register でオブジェクトとメソッドを登録
    • Trigger で登録されたメソッドが呼び出される

使用例

  • Fetcher によるフェッチをフックする場合について述べる
  • 以下は,Fetcher で定義されているフックfetchHook に対し,MyFetcher::Fetch を登録する場合の例である.
    • メソッドのポインタを登録する際は,MyFetcher::Fetch の様にクラス名を付加しなければならない点に注意
HookPoint<Fetcher> Fetcher::s_fetchHook
//----
MyFetcher
{
public:
    void Fetch( HookParameter<Fetcher> param )
    {
    }
}
//----
MyFetcher myFetcher;
Fetcher::s_fetchHook.Register( &myFetcher, &MyFetcher::Fetch, 0 );
Clone this wiki locally