4

カーネルが最初のエントリでネイティブ ユーザーランド Linux アプリケーションをロードした後、通常の意味を持つ RSP と RIP を除いて、x86-64 CPU レジスタはほとんどゼロです。レジスタ CS SS と R11 はゼロではありません。

cs             0x33 51
ss             0x2b 43
r11            0x200    512

x86-64 では、ロング モードではフラットな 64 ビット アドレス モデルを使用しているため、CS および SS レジスタは使用されないというのが私の理解でした。

CS および SS レジスタは、カーネルとの間で何か意味がありますか? ユーザーランドは単にそれらをそのままにしておくことが期待されていますか?

また、R11 の初期値 512 には何か意味がありますか?

4

1 に答える 1

8

64 ビット モードでは、セグメント レジスタは引き続き IDT または GDT エントリを指します。ただし、IDT/GDT エントリには限られた情報しか含まれていません。

データ セグメント セレクター (DS、ES、SS、FS、および GS で有効) には、1 つのビットのみが含まれます。セグメントが存在することを示す "P" ビット。これは、FS および GS レジスタにロードされたセグメントに対してのみ意味があります。

コード セグメント セレクタ (CS に有効) には、アクセス権情報と、CS がそのようなセグメントを指している場合に 64 ビット モードがアクティブであることを示すロング モード ビットが含まれます。

セグメントのベースとセグメントの長さは存在しません。

于 2013-10-21T19:48:44.240 に答える