次のようなメモリレイアウトがあります(メモリアドレスの増加中):
コード セクション (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 を使用してコードを生成するコンパイラ フラグです。
前もって感謝します !!