ぐだぐだ低レベルプログラミング(252)x86(32bit)、失われた常識? PEビット

PEbit
Joseph Halfmoon

前回、CRレジスタについて書いた時、つい「常識」と思って通り過ぎてしまいました。しかし、もしかして今時の若者(中年も)には知られていないかも、と思いなおして1回追加です。CR0のLSB、PE(プロテクトモード・イネーブル)ビットのクリアについて。知らなくても全然問題ないケド、パソコンとx86の奥底に残っている仕様。 “ぐだぐだ低レベルプログラミング(252)x86(32bit)、失われた常識? PEビット” の続きを読む

ぐだぐだ低レベルプログラミング(251)x86(32bit)、コントロール・レジスタ

CRs
Joseph Halfmoon

前回は16ビットと32ビットを「文脈」によって切り替えるプリフィックスでした。これがあればx86(16bit)の命令がx86(32bit)に切り替わるっと。でもね、32ビットになって新設され、ピュアな32ビット操作だけというレジスタも存在します。その一つがCRx(xは0から7)で呼ばれるコントロール・レジスタっす。 “ぐだぐだ低レベルプログラミング(251)x86(32bit)、コントロール・レジスタ” の続きを読む

ぐだぐだ低レベルプログラミング(250)x86(32bit)、オペランドサイズプリフィクス

32_regs
Joseph Halfmoon

前回、32ビット世界突入とほぼほぼ同時に、中の人は手術モード突入。愛してやまない、などと言いながらアセンブラなど吹き飛んでしまいました。ようやく体調戻りつつあり。さっさと練習しないと冗談抜きで「死ぬまでに」x86舐め終わることは難しいっす。でも64ビットのSIMDまで行くとなるととんでもない命令数っす。気が遠くなるよ。 “ぐだぐだ低レベルプログラミング(250)x86(32bit)、オペランドサイズプリフィクス” の続きを読む

ぐだぐだ低レベルプログラミング(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)、セグメントデスクリプタ” の続きを読む

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

TaskDiagram
Joseph Halfmoon

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

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

286protectmode_memory_access
Joseph Halfmoon

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