2009年05月15日

Windows の NTDLL.DLLの RtlCaptureStackBackTrace の バグ

Google Chrome 2.0.180.0 をWin2000でテストをしていて気づいたのですが、Windows 2000の NTDLL.DLL 内のRtlCaptureStackBackTraceにはバグがあって、これが原因で 動作しないアプリケーションがかなりあることがわかりました。

どうも、NTDLL.DLL内で 0xc0000005 で例外が発生しているか、 LoadLibraryEx や、LoadLibrary で GetLastError の値が 998 ( 0x3e6 ) だったら、ほとんど、これが原因といっていい程のかなり広範囲に影響を与えていたバグのようです。

最新版の、NTDLL.DLLである 5.0.2195.7080 でも直っていません。


事の始まりは、Chrome.exeが何の反応もなく瞬時に終了してしまう所からでした。
ntdllbug
Profiling してみると、 chrome.dllのロード中に Error 998 (メモリ ロケーションへのアクセスが無効です。/ Invalid access to memory location.) が発生してる模様。

ntdllbug2
このエラーが発生した場合は、Debugger を使って、first-chance exception (初回の例外) を無効にしてやればいいわけです。

ntdllbug3
これが例外補足した直後。 ecxが 0なのに、ecxが示すアドレスのデータを取りに行っていますね。
これは、RtlCaptureStackBackTrace 内部の処理で、ecxが参照した [ebp+0x14]というのは、関数の 第4パラメータで、BackTraceHash というオプションパラメータです。
MSDNには NULLの場合はハッシュを使用しないとだけかかれています。

          add    esi,00000004h
          cmp    edx,[ebp+0Ch]
          jc     L7C99F227
 L7C99F23D:
          mov    eax,[ebp+14h]
          test    eax,eax
          jz     L7C99F246
          mov    [eax],ebx
 L7C99F246:
          push    00000040h
          pop    ecx
          lea    eax,[ebp-00000100h]
          pop    ebx
 L7C99F250:
          mov    dword ptr [eax],00000000h
          add    eax,00000004h
          dec    ecx
          jnz    L7C99F250
          mov    ax,dx
 L7C99F25F:
          pop    edi
          pop    esi
          leave
          retn    0010h
まず、こちらがXP。ちゃんとNULLの場合はスキップしています。

          add    edx,00000004h
          add    [ebp+08h],ecx
          mov    [esi],ecx
          inc    eax
          add    esi,00000004h
          cmp    eax,[ebp+0Ch]
          jc     L77FA2EEB
 L77FA2F06:
          mov    ecx,[ebp+14h]
          mov    edx,[ebp+08h]
          mov    [ecx],edx
 L77FA2F0E:
          pop    edi
          pop    esi
          leave
          retn    0010h

 SSZ77FA2F14_Unexcepted_exception_in_RtlWalkFrameChai:
          db    'Unexcepted exception in RtlWalkFrameChain ...',0Ah,0
 RtlWalkFrameChain:
          push    ebp
そして、こちらが、Windows 2000。

というわけで、パッチを当ててみました。
          add    edx,00000004h
          add    [ebp+08h],ecx
          mov    [esi],ecx
          inc    eax
          add    esi,00000004h
          cmp    eax,[ebp+0Ch]
          jc     L77FA2EEB
 L77FA2F06:
          mov    ecx,[ebp+14h]
          mov    edx,[ebp+08h]
          test    ecx,ecx
 L77FA2F0E:
          jz     L77FA2F12
          mov    [ecx],edx
 L77FA2F12:
          pop    edi
          pop    esi
          leave
          retn    0010h
;------------------------------------------------------------------------------
          Align    4
 SSZ77FA2F1C_An_exception_in_RtlWalkFrameChai:
          db    'An exception in RtlWalkFrameChain ...',0Ah,0
 RtlWalkFrameChain:
          push    ebp

というわけで、全言語パッチを当てたものを配布してみる実験

Download: Win2000-KB915985-v2-ALL.zip
Language: Multilingual (Spanish/Finnish/français/Norwegian/Greek/English/한국어/Dutch/Hebrew/Hungarian/Italian/Czech/Danish/German/Arabic/Brazilian/中文(简体)/Swedish/Turkish/中文(繁體)/Polish/Português/Русский/日本語/NEC98)
Description: NTDLL 5.0.2195.7081
Author: Customized by BlackWingCat besed ntdll.dll 5.0.2195.7080

ちなみに、Chrome 2.0.180.0 は起動はしたけど、相変わらず、10%の起動確率(^^;

関連記事:
Chrome v3 Beta を Windows 2000で!



blackwingcat at 09:09│Comments(14) | このエントリーをはてなブックマークに追加 mixiチェック |
このエントリーをはてなブックマークに追加
Windows2000 | Programing

Twitter Feedback

この記事へのコメント

1. Posted by 通りすがり   2009年05月15日 09:57
ファイル壊れているみたいですが・・・
2. Posted by blackwingcat   2009年05月15日 11:55
再アップしました。
25182982バイトが正しいサイズです。
3. Posted by 7743   2009年07月08日 19:43
パッチがダウンロードできません><
4. Posted by blackwingcat   2009年07月08日 20:08
すみません。記事を再構築したときに、Livedoorの方でバグがあったようです。
修正しました。
5. Posted by 別の通りすがり   2010年03月04日 23:11
ご報告までなのですが、これを適用したら起動時に何かのエラーダイアログがでました。
こんなやつ↓

NPSWF32_FlashUtil.exe - エントリポイントが見つかりません。
プロシージャエントリポイント GetSystemWow64DirectoryA がダイナミックリンクライブラリ KERNEL32.dll から見つかりませんでした。
6. Posted by blackwingcat   2010年03月04日 23:40
適用したのが原因じゃないみたいですね|・ω・)
FlashPlayerのアップデータなので、該当フォルダにKDWのkernel32
を簡易インストールして見てください。

おそらく、今まで起動すらできていなかった部分が、バグ修正したせいで起動できるようになって、エラーダイアログが表示できるようになったようです。
7. Posted by L.Palmer   2010年06月13日 03:02
いつも有難く利用させて頂いております。

.\JPN\update\update.exe を実行、OS 再起動したところ
C:\WINNT\system32\ntdll.dll が 5.0.2195.7006 のままなのですが、
この結果は正常なのでしょうか? 以下、詳細です。

.\JPN\update\update.exe 実行前:

(1) C:\WINNT\system32\NTDLL.DLL
サイズ: 483,600
更新日: 2005/08/16 02:17:36
VER: 5.0.2195.7006
MD5: E8A30667F719D81B3613D17E88121884

OS 再起動後:

(2) C:\WINNT\system32\ntdll.dll
サイズ: 483,600
更新日: 2005/06/02 23:46:44
VER: 5.0.2195.7006
MD5: 647A0B1284535A03A4776A3FF2133787

(3) C:\WINNT\$NtUninstallKB915985-v2$\ntdll.dll
↑ (1) と MD5 一致

(4) C:\WINNT\$NtUninstallKB915985-v2$\ntdll.dll.000
↑ (2) と MD5 一致

(5) C:\WINNT\Driver Cache\i386\ntdll.dll
サイズ: 484,112
更新日: 2009/05/14 18:50:12
VER: 5.0.2195.7081
MD5: CC41188822FF4177B0841ED50B862124

(6) C:\WINNT\system32\dllcache\ntdll.dll
↑ (5) と MD5 一致
8. Posted by blackwingcat   2010年06月13日 03:11
元のファイルとCRCが変わってるのは、CPUのコア数などが変わって、
マルチプロセッサ用のNTDLLに変わった可能性があります。

3〜6は正常ですが、2がちゃんと切り替わってないみたいです。
もう一度インストールしてみて下さい。
9. Posted by L.Palmer   2010年06月17日 19:56
5 有難うございます。再インストールで上手くいったようです。

bbLean という代替シェル使用中のまま更新を行なったことが
初回インストール失敗の原因だったように思います。
Microsoft Update の利用時など、
シェルが Explorer でないと更新に失敗するケースを過去に経験していました。

BEFORE:

C:\WINNT\system32\ntdll.dll
サイズ: 483,600
更新日: 2005/06/02 23:46:44
VER: 5.0.2195.7006
MD5: 647A0B1284535A03A4776A3FF2133787

AFTER:

C:\WINNT\system32\ntdll.dll
サイズ: 484,112
更新日: 2009/05/14 18:50:16
VER: 5.0.2195.7081
MD5: D11A27F9BE67E7CC59A453F97FD6974C
10. Posted by kua   2011年04月15日 20:01
please I have the same problem with trying to run Google Chrome at windows2000, the Kernell32.dll is misstin this RtlCaptureTackBackTrace.. can some one help me in english? :) thankyou!!!
11. Posted by blackwingcat   2011年04月15日 21:46
Why don't you use google chrome installer for Windows 2000 ?
13. Posted by Joe   2013年07月19日 08:03
これらの改変されたモジュールの再配布はライセンス的に問題はないのでしょうか?
14. Posted by 黒翼猫   2013年07月19日 10:26
だから、あえて、メインサポートフェーズが終わってから配布してるのですよ・ω・
それまでは、バグ対応明言してますし、コンシューマ向けにOSのライセンス販売もされてますから。
XPの改変カーネルを配布しないのも、まだライセンス的に問題があるからと考えています。
15. Posted by 名無しさん   2015年04月13日 19:20
DELPHI XE7のbds.exeが、ntdll.dll内のRtlTraceDatabaseEnumerateで
エラーを起こしてしまいます。
拡張カーネルはv17c,v18g,v20m,v22oなど試しましたがすべて同じでした。ntdll.dllの修正で対応できませんか。

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
livedoor プロフィール

黒翼猫

【募集】Windows 2000で動かしたいソフト/ハードを貸してくださる方、コメントかTwitterでご連絡を。
【BM】はブクマ推奨記事です

My PC
SNOWSTORM(P5E3 Premium)
OS:Win2000AdvancedSv
CPU:Xeon(4Core) 2.83G
Memory:8G
VGA:NVIDIA GTX 780Ti
HDD:SSD(32G)
    +SATA(540G+180G)
Crystal SCR:244765
SNOWFOX2(W860CU)
CPU:Core i5-540M(2.53G)
OS:Win2000Pro
Memory:4G
VGA:Geforce GTX285M
HDD:SSD(160G)
Crystal SCR:176460
SNOWMOBILE3(CF-J10S)
CPU:Core i5-2410M(2.3G)
VGA:Intel HD Graphics
HDD:SSD(128G)
Windows2000
Memory:6G
Crystal SCR:133495
SNOWMOBILE(N10Jc/故障)
Windows2000/XP Home
Crystal SCR:38316
SNOWLEO(MA206J/A/休止)
OS:OSX 10.4 +
Windows2000Pro(Solo動作)
Crystal SCR:24061
Windows 2000の セキュリティ対策について
FFR yarai(脆弱性防御)
SymantecEndpointSecurity 11 MR7
Windows Defender
記事検索
訪問者数

    最近のアクセス数

    Win2000お勧め
    お勧め記事
    Misskey Win95対応Client
    ウイルス対策ソフトの評価の秘密
    Windows 2000でMinecraft
    WLU Tool
    .NET FrameworkのUninstall
    lolifox 0.3.8.x
    WindowsのシャットダウンTips
    Fox Launcher
    ウィルス感染を手動で見つける方法
    Unknown Hard Errorとサルベージ
    Dependency Walker 日本語化
    Ultra VNC 1.0.6/1.0.8 を日本語化
    IME補完計画
    BSoD(ブルースクリーン)特集
    デフラグ時の4つの心得
    不明なデバイス探し
    SETUPAPI/NTDLLBugFix
    DNSデボルブ用更新[KB957579]
    最新 update.sys!
    4Thread以上のCPU最適化
    Win2000マルチコアで最適化
    Windows 2000の通信速度改善1
    Windows 2000の通信速度改善2
    内蔵簡易FireWallを使う
    ワームに感染しないインストール
    Remote Desktop Client
    IME 辞書 Tips
    Win2000用セキュリティSOFT
    不要なファイルの削除
    Win2000カスタマイズ
    便利なキーボードショートカット
    6月末まで使える体験版セキュリティ

    非対応ハード動作編
    HTC NDIS Driver
    Intel HD Graphic Driver
    VMWare Player 3.1.x
    Conexant HD Audio Driver
    NVIDIA WHQL Driver
    Intel Chipset 最新 INF
    Sentelic Finger Pad Driver
    ATI Legacy Driver 10.2
    AMD Radeon Driver 8〜11
    ATI Ahci/Raid Driver
    Intel SATA AHCI Driver
    D21LC(eMobile)
    USB-WSIM
    UVC カメラ
    Logicool Webcam
    Logicool ゲームパッド
    XBOX360用コントローラー
    Logicool Mouse
    Microsoft IntelliPoint
    iPod Touch/iPhone Driver

    非対応アプリ動作編
    Flash Player 10.3
    Java 6 JRE
    Java 7.0 JRE
    ティルズウィーバー
    Natal Online
    コンチェルトゲートフォルテ
    シルクロードオンライン
    東方幻想麻雀
    IME2010 Installer
    Adobe Reader X for Win2000
    Baidu IME 2.x
    MMORPG ドルアーガーの塔
    Adobe Air for Windows 2000
    Baidu IME
    iTunes 10.x installer
    Evernote 4
    Janetter
    Second Life
    雀龍門
    Media Manager for PSP 2.5a
    .NET Framework 3.5SP1
    ATOK 月額版(2010/2011)
    Leaf 愛佳でいくの!!
    VistaのScreenSaver
    会計ソフト弥生シリーズ 10
    Vegas Movie Studio 9
    EyeBall Chat
    ・CanonPowerShot[Soft/DPP]
    Google SketchUp Pro 7
    dance mixer
    Lismo Port
    DivX
    SONY ScreenSaver
    mixi アプリ
    DivX v7.x
    ニコニコムービーメーカー(動画)
    RC-S330 PaSoRi
    Finale 2009
    ZoneAlarm 8.0
    ルナティア Online
    ストリートギアーズ
    xfy Blog Editor
    Photoshop Elements 7
    Premiere Elements 7
    PowerShell 1.0
    ai sp@ce
    電脳フィギュアARis
    VOCALOID2 ミク・リンレン
    Google Chrome/SRW Iron
    Media Player 10
    ・iTunes 7.6.2を使う方法
    QuickTime 7.5x/7.6x
    foobar2000 9.5.x/9.6.x
    RealPlayer11
    Safari3/4.0
    ShockwavePlayer10/11
    Windows Live Writer
    Live Messenger
    Veoh Web Player / Web TV
    Level-R

    追加機能・カスタマイズ編
    W2K Kernel32 改造計画【BM】
    W2K Update Rollup v2
    XNA/SlimDX
    CPU Core数リミット解除
    OutLook Express 6SP3
    MDAC 2.8 SP2
    GIF/PNGを使えるMSPAINT
    IE5でWindowsUpdate
    MSXML 4.0SP3
    DirectX9.0c(2010/Feb)+拡張
    MS09-062(Gdiplus.dll)更新
    Unicode 制御文字
    Internet Explorer6 Bonus Pack
    夏時間(DaylightSavingTime)
    レジストリバックアップを取る
    IME2007
    Windows Media Bonus Pack
    XPSファイルビューア
    Windows Defender
    文字化け対策(FontLink)
    Meirio(KB927489)
    msconfig
    圧縮フォルダ
    Windows Movie Maker
    IE5.01/5.5/6タブ化
    MediaTypeChanger(EISA構成)
    Win2000 SP4 Support Tool
    kill/tlist with Debugging Tools
    sc.exe with Resource kit
    reg.exe
    TaskTray 256色化
    ISO仮想CD/DVDドライバ
    IE6高速化とWSH 5.7/5.8
    MS Baseline Security Analyzer
    音声認識 API 5.1
    Text Service

    Win2000インストール編
    CF-J10S
    N10Jc
    ThinkPad X200(7454)
    Quad Core/X48/P5E3
    VAIO VGN Type S
    E6850搭載 サポートPC
    Let'snote CF-R6
    MacMini
    Dell LATITUDE D630
    Core i7 + X58 +ICH10R
    790FX + SB750
    Clevo W860CU
    最新コメント
    Categories
    アーカイブ

    このサイトはIE5.x/IE6
    IE5.x Internet Explorer 6.x

    Firefox Firefox ブラウザ無料ダウンロード
    で最適化されています。
    Technorati
    Add to iGoogle
    Amazon GIFTでカンパ

    Donation(寄付)