|
Project Information
Links
|
イントロダクションテストを書いていると、一時的に関数の挙動を書き換えたいときがあります。こんな関数のテストするとして、time()関数をライブラリの中に書いてあるので、失敗ルーチンのテストを書くのが非常に難しい場合。。。 //2000年以上か?
bool isOver2000year()
{
//現在動かしたら、絶対 TRUE にしかならない
return time(NULL) >= 946652400; //2000-01-01 00:00:00
}このルーチンを検証するのには、PCの時計を変更しないとだめ。 {
//現在は2010年なので結果はTRUE
bool r = isOver2000year();
printf("%d" , (int)r); //1
}
{
//time関数を乗っ取る all your function are belong to us
SEXYHOOK_FUNC_HOOK_1_BEGIN(time_t,__cdecl,time,time_t * a)
{
//昔の時刻を返すようにする
return 915116400;//1999-01-01 00:00:00
}
SEXYHOOK_FUNC_END();
//現在は2010年なので、結果は TRUE になりそうだが、上で関数をフックしているので、結果は FALSE
bool r = isOver2000year();
printf("%d" , (int)r); //0
}sexyhookを使えば、一時的にAPIや関数、クラスメソッドの挙動を自由に書き換えることが出来ます。 興味を持ったら次のページにゴーSEXYHOOKで始めるテスト 強引に接合部を作成 SEXYHOOK_Users_Manualどうやって実装しているのか気になる人、もっと改造してよりセクシーにしたいハッカー向け SEXYHOOKの実装部(魔術サイド) SEXYHOOK_Hackers_Manual プレゼン (とある関数の接合部 SEXYHOOK) http://prezi.com/aigm45d07lrp/sexyhook2/ 急募:発表できる勉強会w 内容に間違い、バグ等ありましたら、SVN/wikiを修正していただいて結構です。お気軽にどうぞ。 よろしければ、twitterで @super_rti までご連絡ください。 |

