Changes between Version 6 and Version 7 of HowTo/BoostStudy2


Ignore:
Timestamp:
Sep 11, 2010, 3:52:16 PM (14 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/BoostStudy2

    v6 v7  
    167167   * rgb8c_image_t のように !BitDepth のうしろに "c" が入った型名を使う
    168168   * 関数が view を受け取るときは const 参照で受け取ることが推奨されている。この const は view の設定が const なのであって、画像自体が const になるわけではない。
     169
     170
     171== とある関数の接合部 (スィーム) ==
     172
     173sexyhook2 の使い方と実装について
     174
     175=== イントロダクション ===
     176
     177 * テストを書いていると一時的に関数の挙動を書き換えたいことがある。
     178   * ex) システム時刻に依存して true しか返さないような関数が false を返す所を見たい。
     179 * → sexyhook を使えば、一時的に API や関数を置き換えることができる!
     180
     181=== 使い方 ===
     182
     183 * http://code.google.com/p/sexyhook/
     184 * VS, gcc 対応
     185 * デバッグビルドのみ対象
     186 * さまざまなフック
     187   * 関数
     188{{{
     189{
     190        SEXYHOOK_BEGIN(time_t, SEXY_HOOK_CDECL, &time, (time_t * a) )
     191        {
     192                return /* なんか別な値 */;
     193        }
     194       
     195        /* フックした time を使う処理 */
     196}
     197SEXYHOOK_END();
     198/* ブロックを抜ければフックは無効 */
     199}}}
     200   * クラスメソッド
     201     * &クラス名::メソッド名
     202     * 仮想関数はちょっと特殊: SEXYHOOK_END に this を渡す必要がある
     203   * Win32 API
     204     * SEXY_HOOK_STDCALL を使う
     205 * フック中に this を使う
     206{{{
     207SEXYHOOK_THIS(MyClass)->hoge();
     208}}}
     209 *
     210
     211=== 実装方法 ===
     212
     213 * マクロ展開してるよ!
     214   * なんかクラス内クラスができるよ。
     215 * アセンブリいじってるよ!
     216   * スタック積む代わりに jmp ねじ込んでるよ!!
     217 * 差し替える関数ってどうやって呼んでるの?
     218   * 実体を見つけるのが結構大変だったよ!! とくに仮想関数…。
     219 * API フック
     220   * DLL を読み込んだプログラム領域を直接書き換えちゃうよ!
     221   * ↑大丈夫なの??
     222     * 見た感じ大丈夫っぽい
     223     * NT カーネルに詳しい方いらっさいますか? w
     224
     225=== 未来のセクシー ===
     226
     227 * private メソッドへの対応
     228   * Win32 は dbgutil がつかえる!
     229     * でも何故か VS2010 で動かない…
     230     * C++ でリフレクションができるかも…
     231
     232=== 質疑応答 ===
     233
     234 * 多重継承は大丈夫?
     235   * ダイヤモンド継承は無理。
     236   * 単に多重しているだけなら…多分…大丈夫…じゃないかな。
     237 * デバッグ&コンティニューは
     238   * 想定外
     239 * 64 bits にも対応して~
     240 * マルチスレッド
     241   * クラス内クラスだから多分大丈夫…
     242 * #define private public じゃ駄目なの?
     243   * ちょwwww