探検


NEC PC-98シリーズエミュレーターを語ろう25

677名無しさん@お腹いっぱい。
垢版 |
2026/10/27(火) 18:59:28.54ID:wv/9G6QX0
🛠 Binary Patch Details

To fix this, we can force NTVDM to completely bypass the VME initialization path and fall back to the safe legacy software-emulation mode (486-compatible mode).
We only need to change a single conditional jump (jz) into a forced unconditional jump (jmp).
• Target OS: Windows 2000 SP4
• Target File: C:\WINNT\system32\ntvdm.exe (and dllcache\ntvdm.exe)
• File Version: 5.0.2195.7061
Hex Edit Details:
• RVA (Relative Virtual Address): 0x0000C415 (.text section + 0x0000B415)
• File Offset (RAW Address): 0x0BA15 <-- Open with any Hex Editor!
• Original Bytes: 74 07 (jz short ...)
• Patched Bytes: EB 07 (jmp short ...)

🏁 Results

Tested successfully on real Intel 486 hardware running Windows 2000 SP4. NTVDM no longer crashes when opening command.com or launching 16-bit DOS/Win16 applications, and properly routes to the non-VME legacy path.
Hopefully, this helps anyone tinkering with retro x86 hardware or unique CPU upgrades!
678名無しさん@お腹いっぱい。
垢版 |
2026/10/27(火) 19:06:49.14ID:wv/9G6QX0
タイトル:
【世界初】非VME CPU(Intel 486 / VIA C3)でのWindows 2000 NTVDMクラッシュを修正する1バイトパッチ(NTVDM.EXE 5.0.2195.7061 最終版対応)
本文:
Windows 2000 SP4環境において、VME(仮想8086モード拡張)を持たない古いCPU(初期のIntel 486や、VIA C3 Samuel/Samuel2コアなど)で16bit DOSアプリを起動しようとすると、NTVDMが不正命令例外等で即座にクラッシュする有名なバグがあります。
Microsoftが最後まで修正しなかった公式最終バージョンの NTVDM.EXE(Ver 5.0.2195.7061)に対し、安全かつ完全にバグを回避させる「1バイトのHexパッチ手順」を確立しましたので共有します。

🕵‍♂ 原因:コンパイラの最適化による「フライング命令」

バイナリ解析の結果、原因は NtVdmControl(ControlCode 4 / VdmFeatures:CPU機能問い合わせ)を処理する周辺の内部コードにありました。
本来はカーネルにVMEの有無を問い合わせた「後」に処理されるべきVME環境前提の構造体初期化コード(ExpVdmTib や EFLAGS 202h の設定など)が、コンパイラの最適化(命令スケジューリング)によって、NtVdmControl を呼び出す前(間)に割り込んで実行される並び順になってしまっています。
これにより、非VME CPU環境では機能チェックが行われる前に地雷命令を踏むことになり、クラッシュを誘発していました。
679名無しさん@お腹いっぱい。
垢版 |
2026/10/27(火) 19:07:00.04ID:wv/9G6QX0
🛠 バイナリ書き換え手順

NTVDM内部のVME有効化フラグ(地雷ルート)を確実に飛び越えさせ、安全な「レガシーエミュレーションモード(486互換モード)」に固定するため、条件分岐(jz)を無条件ジャンプ(jmp)に書き換えます。
• 対象OS: Windows 2000 SP4
• 対象ファイル: C:\WINNT\system32\ntvdm.exe(および dllcache\ntvdm.exe)
• ファイルバージョン: 5.0.2195.7061
バイナリ書き換え(Hex編集)詳細:
• RVA(相対仮想アドレス): 0x0000C415 (.text セクション + 0x0000B415)
• ファイルオフセット(RAWアドレス): 0x0BA15 <-- Hexエディタでこの位置を開く
• 変更前(純正): 74 07 (jz short ...)
• 変更後(パッチ): EB 07 (jmp short ...)

🏁 結果

Intel 486の実機にて動作確認済み。書き換え後、システムファイル保護(WFP)に注意しながら dllcache と system32 のファイルを差し替えることで、クラッシュが完全に解消し、16bit DOS環境やMS-DOSプロンプトが正常に起動するようになりました。
歴史の闇に埋もれていたバグが、美しい1バイトパッチとして結実しました。
2026/10/27(火) 19:24:45.53ID:MgjxVP2c0
いつまでもスレのルールを守れない連中こそ老害だろ
公共交通や飲食店で平気で順番飛ばすジジババみたいなもんだ
認知の歪みでそうなるらしいけど、ここにも大勢いるな
いい加減周囲に迷惑かけてる事に気付いて欲しいもんだが
2026/10/27(火) 19:32:56.89ID:+lWsLN1P0
効いてて草w
2026/10/27(火) 19:37:38.98ID:lBbblpIh0
効き過ぎてスルーできないからいつまでも粘着する奴らが調子に乗る
2026/10/27(火) 19:50:30.30ID:MgjxVP2c0
スルーしてたら認知症のおじいちゃんたちがいつまでもルール違反なのに気付けずにそのまま続けるからね
歳とっても教育は必要
効くとか効かないとかどうでもいいけど、率先して話に乗ってる老害に言われたくはないんで、ルールが守れないならもう黙っててねおじいちゃん
2026/10/27(火) 20:20:36.84ID:lBbblpIh0
効いてて草
685名無しさん@お腹いっぱい。
垢版 |
2026/10/27(火) 20:24:32.32ID:9lPZPmC80
>>683
注意してるとか高尚なこと言ってるけど全く思惑通りになってないし調子に乗らせてるだけ
スルーしろ、おじいちゃん
2026/10/27(火) 20:58:25.41ID:yy1+SvY+0
毛沢東おしまいだよ
2026/10/27(火) 21:20:48.39ID:wv/9G6QX0
>>671
逆汗ダンプはこちらに投稿しました。
NTVDM.EXEのバージョンが違う場合はご参照ください。

Windows2000を使いつづけるスレ その279
https://mevius.5ch.io/test/read.cgi/win/1736153005/113-114
688名無しさん@お腹いっぱい。
垢版 |
2026/10/27(火) 21:59:16.51ID:wv/9G6QX0
>>671
早とちりでした。
直っていなかったです。問題はDOSアプリではなくWin16アプリでした。
レスを投稿する


ニューススポーツなんでも実況