Visual Studio 2013 に互換モードに関する欠陥判明!

Visual Studio 2013 でコンパイルされたアプリケーション。
Media Player Classic 1.7.6.0 や Lunascape 6.9.2 などを Windows 2000互換モードにして起動するとクラッシュするのですが、その原因が Visual Studio 2013 のライブラリの致命的な欠陥にあることが判明しました。

vc13

          lea    eax,[ebp-00000120h]
          mov    dword ptr [ebp-00000120h],00000114h
          push    eax
          call    [KERNEL32.dll!GetVersionExW]
          test    eax,eax
          jz     L100524B1
          mov    eax,[ebp-0000011Ch]
          push    00000006h
          pop    esi
          sub    eax,00000005h
          jz     L10052473 ; Windows NT 5.xの場合
          dec    eax
          jnz    L10026C52
          mov    eax,[ebp-00000118h]
          sub    eax,00000000h
          jz     L10052464
          dec    eax
          jz     L10052455
             :

 L10052473:
          mov    eax,[ebp-00000118h]
          sub    eax,00000000h
          jz     L100524AA ; Windows 2000と判定された場合
          dec    eax
          jz     L1005249D
          dec    eax
          jnz    L10052493
          mov    dword ptr [L100E03E4],00000002h
          jmp    L10026C6A
 L10052493:
          mov    eax,[L100E03E4]
          jmp    L10026C79
 L1005249D:
          xor    eax,eax
          inc    eax
          mov    [L100E03E4],eax
          jmp    L10026C79
 L100524AA:
          and    dword ptr [L100E03E4],00000000h
 L100524B1:
          lea    ecx,[ebp-0000012Ch]
          call    ??0exception@std@@QAE@XZ
          push    L100DCFD8
          lea    eax,[ebp-0000012Ch]
          mov    dword ptr [ebp-0000012Ch],L100677B4
          push    eax
          call    _CxxThrowException ; 強制的に例外でクラッシュさせる
         db    CCh;   '・

これが、 MSVCR120.DLL の中身です。

なぜかバージョン情報を見て Windows NT5.0と判定されたら即時クラッシュさせる処理が走る

同じことが、 Media Player Classic / iTunes 12 / Lunascape 6.9.2

ためしに msvcr120.dll の  jz     L100524AA(742C) を  jz     L1005249D(741F) に書き換えたら問題なくなったよ・ω・;

おすすめ

2件のフィードバック

  1. 可愛毬也 より:

    これはまた露骨な…

  2. 桃井 より:

    これは明らかにMSが旧OS切り?
    自分はxpと2kしかないから問題ですね

コメントを残す

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