0

次のようなメモリレイアウトがあります(メモリアドレスの増加中):

コード セクション (0 ~ 4k)、データ セクション (4k ~ 8k)、スタック セクション (8k ~ 12k)、カスタムデータ セクション (12k ~ 16k)。

カスタム データ セクションにいくつかの特別な配列、構造体を配置しました。

私が知っているように、Data Segment (#DS)Selector は、データ関連のコンパイラ コードに使用されます。

したがって、データ セクション (4k-8k) には、すべての操作に対してデフォルトで #DS があります。ES を使用できる一部の str op を除きます。お気に入り:

mov    $0xc00,%eax
addl   $0xd, (%eax)

しかし、CustomData へのアクセスには Extra Segment(#ES) セレクターを使用したいと考えています。Base と Limit が異なる ES の新しい GDT エントリを定義します。お気に入り:

mov    $0x3400,%eax
addl   $0xd, %es:(%eax)

だから私の質問は:

GCC には x86 コンパイラ フラグがあり、CustomData セクションのコード アクセスに #ES を使用することをコンパイラに伝えるために使用できます。

つまり、CustomData セクションに #ES を使用してコードを生成するコンパイラ フラグです。

前もって感謝します !!

4

2 に答える 2