バグの理由
自作ソフトウェア RozenBiff でバグが出てしまった わけですが^^;(現在は修正パッチ公開済み)コレは見事にはまったといいますかなんというか。
ソフトウェアの内容としては
- 全てのダイアログを Hook して コントロールのテキスト置き換え
なんですが、ある一定の確率で 意味不明な*1文字列に置き換えるようにしていたのです。
一定の確率ってことで、rand() *2が出てきます。Seed を与えてやらなきゃならんので、Hook DLL をロードするためのアプリケーションで srand()。
これで rand すりゃ適当な値がでてくるぞー!
なんて思ってたのですが、気づいちゃったんですよ。夕飯食べる前に(何
srand で seed を与えるのは良いのですが、そのプロセス空間に seed を与えるだけで、他の hook されたプロセスじゃ srand せずに rand してる状態なんじゃぇねの!? と。
実際、他のプロセスじゃ、ある一定の回数目で確実に文字列が置き換わるという事実に遭遇。 …やっちまった。orz
DLL-Main で srand するって方法も考えたのですが、今回は 各プロセス間で適当な値がでてくる share_rand なるものを作って対処してみました。
いやー、Hook は面白いですけど、「いろんなプロセスでロードされる」という点で結構ワナが待ち構えてますねぇ…