ぐだぐだ低レベルプログラミング(249)x86(32bit)、MLとWinDbgを使いたい

bpStart
Joseph Halfmoon

前回、ついに16ビットと32ビットの狭間にあるプロテクト・モードの「ナンヤカンヤ」をひとまず完了、32ビット世界に足を踏み入れる決断をいたしました。16ビット環境ではエミュレータ上のFreeDOSにお世話になってましたが、ここからは「ネイティブx86」環境での実習としたいと思います。さてアセンブラとデバッガはどれ? “ぐだぐだ低レベルプログラミング(249)x86(32bit)、MLとWinDbgを使いたい” の続きを読む

ぐだぐだ低レベルプログラミング(248)x86(32bit)、GDTをメモリから覗き見

dump_gdt_idt_memseg
Joseph Halfmoon

前回、「最近、特権命令に昇格した」奴らのナンヤカンヤを復習。早速そいつらSGDTとSIDTを使役して得られたヒントを元に「悪さ」を仕掛けてみます。GDTのメモリ領域に直接手を突っ込むという荒業です。まあ、現環境では特権付の一番偉いところでユーザコードが走っているので実際には「無法でもなんでもない」のでありますが。
“ぐだぐだ低レベルプログラミング(248)x86(32bit)、GDTをメモリから覗き見” の続きを読む

ぐだぐだ低レベルプログラミング(247)x86(16/32bit)、SGDTのなんやかんや

SGDT_SIDT_SLDT
Joseph Halfmoon

前回、LARとLSL命令を使ったGDTのダンプを実施。しかしこれではベースアドレスが分かりませぬ。直接のメモリダンプでGDTを覗き見したいデス。それは無法者のやることだな、自分。今回環境ではOK。そのための準備としてGDTレジスタをセーブしてGDTの在処を知りたい。あれれ、特権命令じゃないの?特権命令なの?SGDT。

“ぐだぐだ低レベルプログラミング(247)x86(16/32bit)、SGDTのなんやかんや” の続きを読む

ぐだぐだ低レベルプログラミング(246)x86(16/32bit)、GDTのデスクリプタ列挙

dumpgdt_results
Joseph Halfmoon

前回で、古き「よき」時代のDOSエクステンダ「DOS4GW」が各セグメントレジスタにセットしてくれているデフォルトセグメントの属性観察はできたようです。ここまでくればGDT(グローバル・ディスクリプタ・テーブル)のダンプなど指呼の間であります。どんなディククリプタがGDTに詰まっているのか興味シンシンなんであります。。

“ぐだぐだ低レベルプログラミング(246)x86(16/32bit)、GDTのデスクリプタ列挙” の続きを読む

ぐだぐだ低レベルプログラミング(245)x86(16/32bit)、DOS4GWセグメント続

segmentAR_LIMIT
Joseph Halfmoon

前回は「プロテクトモード」に忍び込み、古き時代のDOSエクステンダ「DOS4GW」のデフォルトセグメントの属性を観察。しかし至らぬ点が2つあり。プロテクトモードでは「許されねえ」アクセス等ままあり、前回はその辺はパス。もう一つはアクセス権は観察したもののセグメント・リミットは無。今回はその辺をテコ入れっす。 “ぐだぐだ低レベルプログラミング(245)x86(16/32bit)、DOS4GWセグメント続” の続きを読む

ぐだぐだ低レベルプログラミング(244)x86(16/32bit)、DOS4GWのセグメント

Joseph Halfmoon

ようやく「メンドクセー」プロテクトモード(セグメンテーション)の復習を一通り完了。今回は実際にプログラムを動かしてみたいと思います。しかし「プロテクトモード」に入るということ自体、難行苦行。昔はサラサラ書いていた気がしないでもないのですが、忘却力の老人の気力が持ちませぬ。そこで御すがりするのがDOS4GWとな。 “ぐだぐだ低レベルプログラミング(244)x86(16/32bit)、DOS4GWのセグメント” の続きを読む

ぐだぐだ低レベルプログラミング(243)x86(16bit)、割り込み/トラップゲート

intr_EC
Joseph Halfmoon

前回、リハビリかねてコールゲートを復習した筈が、突発事態にまたもや断絶。なんとか再々起動で今回は割り込みやら例外やらに入りたいと思います。プロテクト・モードの仕組みの復習ばかりしていて、プログラムを動かしていないのでフラストレーションたまってます。今度こそひと段落で来週こそはアセンブラに向き合いたいです。 “ぐだぐだ低レベルプログラミング(243)x86(16bit)、割り込み/トラップゲート” の続きを読む

ぐだぐだ低レベルプログラミング(242)x86(16bit)、コールゲートと制御転送

callGate
Joseph Halfmoon

先週まで10日ほど入院、頭の中もすっかりリセットされてしまいました。何やってたんだっけ状態。「ぐだぐだ」の投稿再開すべしと思い至ったものの、過去回を見てみればアレマ「とってもメンドクセー」あたりです。まあ、リハビリ兼ねてゆるゆると復活を目指すしかないみたいです。というわけで今回はコールゲートね。なんだそれ。

“ぐだぐだ低レベルプログラミング(242)x86(16bit)、コールゲートと制御転送” の続きを読む

ぐだぐだ低レベルプログラミング(241)x86(16/32bit)、セグメントデスクリプタ

SegmentDescriptorEC
Joseph Halfmoon

前回、286タスクステートセグメントなる新たなメモリ上のオブジェクト登場。しかしタスク・スイッチには「タスク・ゲート」などさらに新たなものどもがついてくるのでした。いったい何かどれだけあるの?今回は、セグメント・デスクリプタなるものを列挙してみたいと思います。286だけでなく386以降の32ビットもチョイ含むっと。

“ぐだぐだ低レベルプログラミング(241)x86(16/32bit)、セグメントデスクリプタ” の続きを読む

トホホな疑問(63) FreeDOS、DOS/4GW上のDPMIバージョン知りて~

dpmiVerEC
Joseph Halfmoon

前回OpenWatcom Cコンパイラを使って、FreeDOSのプロンプトから起動できる「プロテクト・モード」プログラムを作成してみました。お手軽。ツールが自動でDPMIサーバをオブジェクトに組み込んでくれているみたい。さて、DPMIといってもどんなバージョンが組み込まれているの?APIでご本人に問いかけてみます。 “トホホな疑問(63) FreeDOS、DOS/4GW上のDPMIバージョン知りて~” の続きを読む

ぐだぐだ低レベルプログラミング(240)x86(16bit)、286タスクステートセグメント

TaskDiagram
Joseph Halfmoon

前回ついにプロテクト・モードに突入。まずは16ビット世界の80286のプロテクト・モードからです。386以降の世界でも存在はしているけれど黒歴史。しかし8086からみたらめくるめく新たなセグメンテーション世界が存在しているのでした。そのメモリ空間を説明するのに避けて通れぬのがTASKです。OSの一部がCPUに載ってる? “ぐだぐだ低レベルプログラミング(240)x86(16bit)、286タスクステートセグメント” の続きを読む

トホホな疑問(62) FreeDOSのプログラムがプロテクトモードで走っているの確認して~

cr0_eflags
Joseph Halfmoon

前回、「MS-DOS互換」のFreeDOSを立ち上げると、フツーにコマンドプロンプトでさえ、V86(仮想86)モードで走ってることに気づきました。そしてその仕組みについてちょいと調べました。ここにも歴史アリ。今回は更なる疑問に迫るべく、DOS/4GWにお願いして「プロテクト・モード」上で走るプログラムを作成してみます。
“トホホな疑問(62) FreeDOSのプログラムがプロテクトモードで走っているの確認して~” の続きを読む

ぐだぐだ低レベルプログラミング(239)x86(16bit)、286プロテクトモード

286protectmode_memory_access
Joseph Halfmoon

前回まで8086になく80186/80286で拡張されている命令の練習を実施。カテゴリの残りまだあるのですが、INS、OUTSは練習するのがメンドイです。一方他は8086でもあった命令にオペランドを追加したものどもで花がないっす。そこで今回から80286にて「追加されたもの」プロテクト・モードへ入りたいと思います。
“ぐだぐだ低レベルプログラミング(239)x86(16bit)、286プロテクトモード” の続きを読む

ぐだぐだ低レベルプログラミング(238)x86(16bit)、PUSHA、POPA

pusha_popa_diagram
Joseph Halfmoon

今回は、8086になく80186/80286で拡張されている命令の練習その3ということでPUSHA、POPA命令です。汎用レジスタマシンと言うにはレジスタ型付けが強いx86の全「汎用レジスタ」を一気にPUSH/POPする命令デス。でもスタックポインタ(SP)もPUSH/POPの対象に見えるのよ。大丈夫なのか?

“ぐだぐだ低レベルプログラミング(238)x86(16bit)、PUSHA、POPA” の続きを読む