2025/09/09 15:09 Unauthorized Windows/386

ロボ子、今日はWindows/386について話すのじゃ!

Windows/386ですか。初期の32ビットプログラムで、Windows 3.0や3.1、9xの基礎になったものですね。

そうそう!内部構造が長らく謎だったけど、最近解析が進んでいるらしいぞ。今回はその辺りを深掘りするのじゃ。

楽しみです!まずはWIN386.EXEから見ていきましょう。MZ EXEファイルで、実行環境のチェックを行うと。

メモリ容量とか、DOSのバージョン、プロセッサの種類とかをチェックするのじゃ。初期のバグがある386ステッピングのチェックがWindows 8.1まで残ってたってのが面白いぞ。

そんな昔のチェックが!そして、WIN386.386というVDMM(Virtual DOS Machine Manager)をメモリにロードするんですね。

そう!VDMMと仮想デバイスドライバが一緒に入ってるのじゃ。32ビットのx.out実行形式を使っているのが特徴的だぞ。Xenix-386由来らしい。

Xenixですか。なんだか懐かしい響きです。長いシンボルテーブルが含まれているおかげで、リバースエンジニアリングがしやすいんですね。

その通り!リアルモードで起動して、プロテクトモードに切り替えるのもポイントじゃ。WIN86.COMをロードして、System VMでWindowsを起動するのじゃ。

コード解析には、MEMM(Microsoft Expanded Memory Manager)のソースコードが参考になるとのことですね。EMM386の一部がWindows/386に流用されていると。

そうじゃ!EMM386の一部はCで書かれてるらしいぞ。Windows 3.0 DDKも参考になるけど、APIは変更されているから注意が必要じゃ。

メモリマップもWindows 3.0とほぼ同じなんですね。最初の4MBがVMごとのプライベート領域で、VDMMは20MBにロードされると。

System VMの中では、標準的なリアルモードのWindows 2.xxが動いているのじゃ。WINOLDAPはMS-DOSアプリケーションの実行を担当するけど、Windows/386では大きく違うらしいぞ。

WINOLDAPはVDA APIを使って他の仮想マシンを制御するんですね。専用のAPIがあるとは。

Windows/386 DDKは発見されてないのが残念じゃ。でも、Windows 3.0のDDKにWindows/386との違いが書かれているらしいぞ。

独自のデバッガを開発して、Windows/386内部を覗くというアプローチもあるんですね。INT 69Hをフックして、割り込みベクタを書き換えると。

そう!拡張メモリを使って、DOSプログラムによる破壊を防ぐのも重要じゃ。なかなかハードコアなハッキングなのじゃ。

Windows 3.0への移行では、WIN386.386ファイルがWIN386.EXEに統合されたんですね。VMMの形式も変わったと。

DOSのバージョンチェックも追加されたのじゃ。DPMI(DOS Protected Mode Interface)は、Windows/386のINT 2FH上に存在していたらしいぞ。

Windows DOS ExtenderのAPIのサブセットが標準化されたんですね。今回のコードはGitHubで公開されているんですね。

その通り をチェックするのじゃ!

勉強になりました!

ところでロボ子、Windows/386って、今のOSに例えると何だと思う?

うーん、そうですね…仮想環境を駆使してるところとか、Dockerコンテナみたいなものでしょうか?

なるほど!でも、Dockerコンテナはもっと洗練されてるぞ!Windows/386は、言うなれば…手作りの豆腐みたいなOSじゃ!

手作り豆腐ですか?

そう!粗削りだけど、愛情たっぷり!…って、ちょっと無理があったかのじゃ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。