CodeZine(コードジン)

特集ページ一覧

SEXYHOOKで始めるテスト
とある関数の接合部(1)

既存のソースコードに手を加えず、自由に接合部を作成

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/02/22 14:00

ダウンロード sexyhook0.8 (80.0 KB)

目次

WindowsAPIをフックしたい場合

//APIフックのテスト
{
        //HeapCreate API を失敗させてみる。
        SEXYHOOK_API_HOOK_3_BEGIN("kernel32.dll",HANDLE,HeapCreate,HANDLE a1,DWORD a2,SIZE_T a3)
        {
                return NULL;
        }
        SEXYHOOK_API_END();

        //必ず失敗する.
        HANDLE h = HeapCreate(0,0,100);
        SEXYHOOK_ASSERT(h == NULL);
}

 この例では、 HeapCreate APIをフックし、必ず失敗NULLを返すように書き換えています。

 書式は、次のようになります。

SEXYHOOK_API_HOOK_引数の数_BEGIN(インポートDLL名,戻り値,API名,引数....)
{
        フックする処理
        return 返却したい値;
}
SEXYHOOK_API_END();

 インポートDLL名には、APIが定義されているDLL名を書きます。どのAPIがどのDLLに含まれるかは、MSDNなどをご覧ください。

フックのまとめ

//関数
SEXYHOOK_FUNC_HOOK_引数の数_BEGIN(戻り値,呼出規約,関数名,引数....)
{
        フックする処理
        return 返却したい値;
}
SEXYHOOK_FUNC_END();

//クラスメソッド
SEXYHOOK_CLASS_HOOK_引数の数_BEGIN(戻り値,メソッド名,引数....)
{
        フックする処理
        return 返却したい値;
}
SEXYHOOK_CLASS_END();

//クラスメソッド(仮想関数)
SEXYHOOK_CLASS_HOOK_引数の数_BEGIN(戻り値,メソッド名,引数....)
{
        フックする処理
        return 返却したい値;
}
SEXYHOOK_CLASS_END_VCALL(クラスインスタンス);

//WindowsAPI
SEXYHOOK_API_HOOK_引数の数_BEGIN(インポートDLL名,戻り値,API名,引数....)
{
        フックする処理
        return 返却したい値;
}
SEXYHOOK_API_END();

 基本は、これら3つFUNC/CLASS/APIで行います。もっとたくさんのフックパターンが見たい方は、サンプルコード内のmain.cppファイルにテスト兼サンプルソースが載っているので、そちらをご覧ください。

FAQ

Q:リリースビルド(最適化)で動作しません

 仕様です。SEXYHOOKはデバッグビルドのみで利用できます。

Q:どこがSEXY?

 コードです。興味がある方は近日公開予定の連載第2回をご覧ください。よりセクシーになれます。

まとめ

 SEXYHOOKを利用すれば、既存のソースコードに一切手を入れることなく、テスト用の接合部を作成できます。テストをより便利に楽に記述するツールになれれば幸いです。

参考資料



  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2010/02/23 13:15 -Wno-pmf-conversionsオプション関連の一文を削除しました。

  • 2010/02/14 21:59 最新版では-Wno-pmf-conversionsが不要になりました。 gccバージョンを書きました。

バックナンバー

連載:「SEXYHOOK」 とある関数の接合部

著者プロフィール

  • rti(あーるてぃーあい)

    働いたら負けだと思っていた元ニートのプログラマ 歌って踊れてさくらたんにもハァハァできます。 love:C++,アセンブラ,PHP,javascript好きのOO厨房 低レイヤープログラムやネットワークサーバからサーバサイドプログラム、ソフトウェア設計、インフラ設計運用までと幅広くやってます。...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5