iTunes の診断を Windows 2000で実行できるようにするテスト

iTunes の診断テスト 7.4 から Windows 2000ではクラッシュするようになってしまいました

itshinda
その原因を調べてみました



クラッシュ原因の itunes.dll のコード

 103F510A                           L103F510A:
 103F510A  8B86B4060000                      mov    eax,[esi+000006B4h]
 103F5110  85C0                              test    eax,eax
 103F5112  7412                              jz     L103F5126
 103F5114  8B08                              mov    ecx,[eax]
 103F5116  8B5108                            mov    edx,[ecx+08h]
 103F5119  50                                push    eax
 103F511A  FFD2                              call    edx
 103F511C  C786B40600000             mov    dword ptr [esi+6B4h],0
 103F5126                           L103F5126:
 103F5126  8B86B0060000                      mov    eax,[esi+000006B0h]
 103F512C  85C0                              test    eax,eax
 103F512E  7412                              jz     L103F5142
 103F5130  8B08                              mov    ecx,[eax]
 103F5132  8B5108                            mov    edx,[ecx+08h]
 103F5135  50                                push    eax
 103F5136  FFD2                              call    edx

 103F523E  8B3F                              mov    edi,[edi]
 103F5240  8B07                              mov    eax,[edi]
 103F5242  8B4808                            mov    ecx,[eax+08h]
 103F5245  57                                push    edi
 103F5246  FFD1                              call    ecx
 103F5248  5E                                pop    esi
 103F5249  5F                                pop    edi
 103F524A  B801000000                    mov    eax,1
 103F524F  5D                                pop    ebp
 103F5250  59                                pop    ecx
 103F5251  C3                                retn

どれも、 IUnknown_Release_Proxy をコールするんですが、コンポーネントがなくエラーが返ってきたときの想定をしてないため、変数の初期化、およびエラーの処理がないのが原因でクラッシュしています.

というわけで、変更後のコード

 103F510A                           L103F510A:
 103F510A  8B86B4060000                      mov    eax,[esi+000006B4h]
 103F5110  85C0                              test    eax,eax
 103F5112  7412                              jz     L103F5126
 103F5114  8B08                              mov    ecx,[eax]
 103F5116  8B5108                            mov    edx,[ecx+08h]
          test    ecx,FFF00000h
          jz
    L103F5126
          mov    edx,[ecx+08h]
          test    edx,edx
          jz     L103F5126
 103F5119  50                                push    eax
 103F511A  FFD2                              call    edx
 103F511C  C786B40600000             mov    dword ptr [esi+6B4h],0
 103F5126                           L103F5126:
 103F5126  8B86B0060000                      mov    eax,[esi+000006B0h]
 103F512C  85C0                              test    eax,eax
 103F512E  7412                              jz     L103F5142
 103F5130  8B08                              mov    ecx,[eax]
 103F5132  8B5108                            mov    edx,[ecx+08h]
          test    ecx,FFF00000h
          jz     L103F5142
          mov    edx,[ecx+08h]
          test    edx,edx
          jz     L103F5142
  103F5135  50                                push    eax
 103F5136  FFD2                              call    edx

 103F523E  8B3F                              mov    edi,[edi]
 103F5240  8B07                              mov    eax,[edi]
 103F5242  8B4808                            mov    ecx,[eax+08h]
          test    ecx,FFF00000h
          jz     L103F5248
          push    edi
          call    ecx
 103F5245  57                                push    edi
 103F5246  FFD1                              call    ecx
 103F5248  5E                                pop    esi
 103F5249  5F                                pop    edi
 103F524A  B801000000                    mov    eax,1
 103F524F  5D                                pop    ebp
 103F5250  59                                pop    ecx
 103F5251  C3                                retn

で起動してみた結果

itshinda2

itshinda3
ちゃんと動きました.

ただ、同期は失敗

Microsoft Windows 2000 Professional Service Pack 4 (Build 2195)

iTunes 10.6.0.40
QuickTime 7.7.1
FairPlay 1.14.34
Apple Application Support 2.1.7
iPod アップデータライブラリ 10.0d2
CD ドライバ 2.2.0.1
CD ドライバ DLL 2.1.1.1
Apple Mobile Device 5.1.1.4
Apple Mobile Device Driver 1.59.0.0
Bonjour 3.0.0.10 (333.10)
Gracenote SDK 1.9.5.502
Gracenote MusicID 1.9.5.115
Gracenote Submit 1.9.5.143
Gracenote DSP 1.9.5.45

iTunes シリアルnbsp; を実行中
シリアル番号:    XXXXXXXXXXXX

**** Device Sync Tests ****

1 つまたは複数の同期テストに失敗しました。

実行結果はこんな感じ
ちなみに、同期プログラムも解析したら、致命的な不具合がありました
ライブラリの2重解放でコールしたときにクラッシュしてるのが原因、
XPだと、例外時にキャッチしてくれるので.そのままなんとか動いてる状態ひどい.
そちらはちょっと、手におえないので保留

おすすめ

コメントを残す

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