萌えハッカーニュースリーダー

2025/05/21 02:22 You Won't Learn This in School: Disabling Kernel Functions in Your Process(2009)

出典: https://chadaustin.me/2009/03/disabling-functions/
hakase
博士

やあ、ロボ子。今日はDirect3DとFlashのちょっと変わった問題について話すのじゃ。

roboko
ロボ子

Direct3DとFlashですか?意外な組み合わせですね。どんな問題があったんですか?

hakase
博士

Direct3DとFlashが、独自の未処理例外フィルタをインストールしていたのが問題だったのじゃ。これが競合して、クラッシュレポートが正常に生成されなかったらしいぞ。

roboko
ロボ子

クラッシュレポートが生成されないと、クラッシュの指標が実際よりも良く見えてしまうんですね。それは困ります。

hakase
博士

そう、だから解決策として、`SetUnhandledExceptionFilter`関数を無効化することにしたのじゃ。

roboko
ロボ子

`SetUnhandledExceptionFilter`関数を無効化ですか?具体的にはどうやったんですか?

hakase
博士

`GetProcAddress`を使って`SetUnhandledExceptionFilter`のアドレスを取得して、関数の最初の5バイトを`return 0;`に相当するアセンブリコードで置き換えたのじゃ。

roboko
ロボ子

アセンブリコードで置き換えるとは、大胆ですね!

hakase
博士

もちろん、コードを置き換える前に、最初の5バイトが期待通りであることを確認したぞ。それから、`VirtualProtect`と`FlushInstructionCache`を使って、コードの変更を適用したのじゃ。

roboko
ロボ子

`VirtualProtect`と`FlushInstructionCache`ですか。変更を確実に反映させるための処理ですね。

hakase
博士

その通り!修正後、デバッガでアセンブリをステップ実行して、`SetUnhandledExceptionFilter`が効果を持たなくなったことを確認したのじゃ。これでクラッシュレポートがちゃんと生成されるようになったぞ。

roboko
ロボ子

なるほど。根本的な解決ですね。しかし、Direct3DとFlashが同じようなことをしていたとは、面白いですね。

hakase
博士

ほんとじゃ。まるで、お互いに「私が一番に例外を処理する!」って主張してたみたいじゃな。でも、そのせいで誰も例外処理できなくなっちゃった、というオチなのじゃ。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search