アプリケーションログの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
0なのでFAST_FAIL_LEGACY_GS_VIOLATION ですね

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です