概要 モジュールの実行可能領域のインポートセクションを書き替えることで、 Cライブラリ関数やWindowsAPI関数の呼び出しを別の関数呼び出しに差し替えます。 何故これが必要か プロジェクト内のソースがすべて自前で管理されているなら、 置き換えたい関数のラッパー関数を作るとか、もしくは美醜はさておき define で置換もできますし、 今回みたいな大げさなことをする必要はあんまりないです。 問題はサードパーティ製ライブラリの挙動です。 製作元を介さずにこれを書き替える必要って多々あります。 以下、「使用例」の項にいくつか例を示します。 影響範囲など DLLの関数置き換えなどが発生するわけですが、 「え、それって他アプリにも影響するんじゃないの?」って思う方もおられるかもしれませんが、 結論を言うと他アプリには影響しません。(影響を与える手法も存在しますが今回は触れません) 何故なら、書き
![APIフック (Cライブラリ関数やWindowsAPIの書き換え) と、その応用例 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/c9d96d397b1e9f14be62d312ea9ca95e3a0f9220/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QVBJJUUzJTgzJTk1JUUzJTgzJTgzJUUzJTgyJUFGJTIwJTI4QyVFMyU4MyVBOSVFMyU4MiVBNCVFMyU4MyU5NiVFMyU4MyVBOSVFMyU4MyVBQSVFOSU5NiVBMiVFNiU5NSVCMCVFMyU4MiU4NFdpbmRvd3NBUEklRTMlODElQUUlRTYlOUIlQjglRTMlODElOEQlRTYlOEYlOUIlRTMlODElODglMjklMjAlRTMlODElQTglRTMlODAlODElRTMlODElOUQlRTMlODElQUUlRTUlQkYlOUMlRTclOTQlQTglRTQlQkUlOEImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTVhZjA1ZTFmN2ViN2FjMTMyYWIwNmEyMDVkMDY5OWVh%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrb2Jha2UlNDBnaXRodWImdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWQxMDE3ZGMxNDg4Yzc1NzEyZWVmNjRkMjIwOTIyMWNh%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3De2c48907dd9f79b4b2eb10ba8dfb1df0)