拡張カーネル v2.5e で終了時にクラッシュするアプリの原因

報告を受けたアプリを調べた結果
原因が分かったのですが、次のような処理が原因でした

下のようなプログラムを動かすと

    HINSTANCE hDll;
    hDll=LoadLibraryA("shell32.dll");
    LoadLibraryA("shell32.dll");
    LoadLibraryA("shell32.dll");
    FreeLibrary(hDll);
    FreeLibrary(hDll);
    FreeLibrary(hDll);
    FreeLibrary(hDll);
    FreeLibrary(hDll);

古い拡張カーネルでは動作しますが、
新しい拡張カーネルは4回目の FreeLibraryでクラッシュします。

実は、今までのプログラムはプログラムのバグによるライブラリの二重解放を無視していたのですが、
拡張カーネル v2.5e は解放先のメモリ領域が既に解放済みになってるとXP向けのAPIで拡張した部分が、エラーを出して処理できなくなるのです。

要するに、終了時にエラーが出るアプリはライブラリの二重解放というバグがあるソフト…ということになります。

エラーを出すのが、まぁ正常といえば正常な気もするのですが、そういうソフトが多いとなると、
やっぱり無視するのが礼儀なんですかね・ω・;

ちょっと対応方法を考えてみます。

おすすめ

コメントを残す

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