私が理解しているように、これらは.section
ディレクティブです:
awxMSGT
COFF 形式が使用された場合の「古い」ディレクティブには「読み取り専用」がありました。
ELF 形式の .section を読み取り専用にするにはどうすればよいですか? 指定子がまったくない?
私が理解しているように、これらは.section
ディレクティブです:
awxMSGT
COFF 形式が使用された場合の「古い」ディレクティブには「読み取り専用」がありました。
ELF 形式の .section を読み取り専用にするにはどうすればよいですか? 指定子がまったくない?
はい、たとえばobjdumpを使用して確認できるように、空のフラグは読み取り専用になります (書き込み可能な明示的な w のないフラグは読み取り専用になります) 。そのため、.section foo
または.section bar, ""
両方が読み取り専用セクションを作成します。ただし、おそらく割り当て可能にしたいので、.section baz, "a"
. これはまた、実際にファイルからメモリにデータを読み取るために自動的にオンになるようです@progbits
(objdump でマークされています)。LOAD
安全のために手動で指定することもできます。詳細については、GAS のドキュメントを参照してください。
編集: GNU AS情報を見て、私が以下に書いたものはそれに答えます。リンカスクリプトの例と同じように、省略すると、w
このセクションは書き込み不可であることに注意してください。
これが完全にあなたが求めていたものではない場合は申し訳ありません。それは正しく聞こえたので、私はそれを突き刺しました!
MEMORY
したがって、リンカーについて話している場合、探しているのはリンカースクリプトの領域だと思います。
例えば:
MEMORY
{
flash (rx) : org = 0x00000000 , len = 0x00080000
sram (rwx) : org = 0x40000000 , len = 0x00010000
}
w
フラッシュセグメントを除外したという事実は、それが読み取り専用であることを意味します。次に、後でセクション仕様で使用します。
SECTIONS
{
/* .text section (executable code) */
.text :
{
blah blah blah
} > flash
_etext = . ;
PROVIDE ( etext = . );
/* .data section (read/write initialized variables) */
.data : AT (_etext)
{
blah blah blah
} > sram
}
各セクションがメモリ内のどこに格納される> flash
かをセクション仕様で指定します。またはを使用> sram
して、読み取り専用メモリにあるかどうかを示します(また、AT (_etext)
読み取り専用で開始し、後でコピーされるように指定します)。
あなたがアセンブラーについて具体的に質問していたことは知っていますが、これは私があなたが求めていたと思っていたもののように聞こえました。
それが役に立てば幸い!