アンロードされたサードパーティDLLからスレッドが実行されていた事例
アンロードされたサードパーティ製DLLからスレッドが実行されてしまう問題について解説。意図せずDLLがアンロードされた後もコードが実行され続けるケースを取り上げ、その原因と対処法を説明する。
背景メモ
- **Raymond Chen**(レイモンド・チェン)はマイクロソフトのエンジニアで、ブログ「The Old New Thing」でWindows内部の深い挙動やデバッグ事例を長年解説しており、Windows開発者の間で非常に著名。
- 本記事の事例:サードパーティDLLが既にアンロードされた後も、そのDLL内のコードがスレッド上で実行され続けてしまった(=解放済みメモリ上でコードが走る「use-after-free」の一種)というクラッシュ/不具合の解析話。
- こうした現象は、プラグインや拡張機能として動的に読み込まれたDLLが自ら後始末(クリーンアップ)をせずにアンロードされた場合に起こり得る。特に、スレッドプールや非同期コールバックの完了後にDLLが先に解放されると再現しやすい。
- この記事は、Windowsプログラマが「DLLがアンロードされた後にそのDLLの関数が呼ばれる」という一見不可解なクラッシュをどう特定・デバッグするか、その実践的ノウハウを提供している。