2014-05-02から1日間の記事一覧

リニアアドレス→物理アドレスの変換方式

セグメントディスクリプタのリニアアドレスの算出式を疑似コードで表現すると、 QWORD segment_desc segment_desc := *(QWORD *)((gdtr AND 0xFFFFFFFF0000) + (segment_reg AND 0xFFF8))上で求めたセグメントディスクリプタの値(segment_desc)から、飛び…

論理アドレス空間上のLinuxカーネルの位置

Linuxカーネルは、4GBのアドレス空間上の「0xC0100000」にロードされます。これはおおよそ3Gの位置ですが、「0xC0100000 = 0xC0000000 + 0x100000」なので、正確には「3G+1M」の位置にロードされることになります。論理アドレス上では上記の通りですが、物理…

セグメント・ディスクリプタ

63 56 55 54 53 52 51 48 47 46 44 43 41 40 39 32 +----------------+---+---+---+---+--------------------+---+---+---+------+---+-------------------+ |ベース(上位8bit)| G | D |res|AVL| リミット(上位4bit) | P |DPL| S |タイプ| A | ベース(中8ビ…

セグメント・セレクタ

セグメント・セレクタとは、ディスクリプタ・テーブル上、現在どのディスクリプタを使用しているかを示す「セレクタ値」のことです。セレクタ値は、セグメント・レジスタに格納されます。 15 3 2 1 0 +---------------+--+---+ | Index |TI|RPL| +----------…

GDTR(Global Descriptor Table Register)

GDTRについて。 GDTR(Global Descriptor Table Register)とは、論理アドレス→物理アドレスのマッピングテーブルの先頭アドレスを格納するレジスタである。 47 16 15 0 +---------------------+-------------+ | Linear Base Address | Table Limit | +----…