アプリケーションログのBEXエラーからバグを特定してみた
障害バケット 1601346972890342422、種類 5 イベント名: BEX 応答: 使用不可 Cab ID: 0 問題の署名: P1: mofmof.exe P2: 5.0.2195.0 P3: 66567124 P4: mofmof.exe P5: 5.0.2195.0 P6: 66567124 P7: 00002e35 P8: c000000d P9: 00000000 P10: |
アプリケーションログの P1 は実行ファイル名、P2はアプリバージョン、P3がアプリケーションタイムスタンプ、P4が障害モジュール名、P5が障害モジュールバージョン、P6がモジュールのタイムスタンプ、P7が障害アドレス、P8が障害エラー名
P8がc000000dであるので、無効なパラメータがサービスまたは関数に渡されたのが原因。実行ファイルを逆アセンブルして、アドレス付近を特定してみたところ、インライン展開された、fclose 関数だと判明。エラー分岐条件によって解放済み ファイルハンドルが渡されたときにクラッシュしてることが分かった(((・ω・)))めでたしめでたし(?)
なお、P9の値は、winnt.hで定義されてることが分かった
define FAST_FAIL_LEGACY_GS_VIOLATION 0 define FAST_FAIL_VTGUARD_CHECK_FAILURE 1 define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2 define FAST_FAIL_CORRUPT_LIST_ENTRY 3 define FAST_FAIL_INCORRECT_STACK 4 define FAST_FAIL_INVALID_ARG 5 define FAST_FAIL_GS_COOKIE_INIT 6 define FAST_FAIL_FATAL_APP_EXIT 7 define FAST_FAIL_RANGE_CHECK_FAILURE 8 define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9 define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10 |
Comments