TL;DR BasicBlockを実行する度にゲストOS判定を行う。 init_taskのアドレスなどからshared/kernelinfo/procinfo_generic/procinfo.iniデータベースを使ってOSの種類、バージョンを特定しProcInfoに格納。init_taskのアドレスによって特定している(これでディストリビューション,バージョン分けきれるのか?) また.ini内のts_xxxなどはtask_struct構造体のxxxメンバのオフセットを表している。 また、OSのバージョン名.initをkernelinfo/old_stuff/lib_confから検索し、glibcの関数,RVAの組み合わせを読み込む。 ゲストOSの判定が完了したらTLBが実行される度に
APIフック_bynameでは指定された関数名を、上記の方法で取得したfunc,RVAの組み合わせよりアドレスを得てフックをセットする。
APIフック情報はload/saveによる一時的な保存が可能。(いわゆるrecord and replayだと思われる)