3

私が理解しているように、これらは.sectionディレクティブです:

awxMSGT

COFF 形式が使用された場合の「古い」ディレクティブには「読み取り専用」がありました。

ELF 形式の .section を読み取り専用にするにはどうすればよいですか? 指定子がまったくない?

4

2 に答える 2

5

はい、たとえばobjdumpを使用して確認できるように、空のフラグは読み取り専用になります (書き込み可能な明示的な w のないフラグは読み取り専用になります) 。そのため、.section fooまたは.section bar, ""両方が読み取り専用セクションを作成します。ただし、おそらく割り当て可能にしたいので、.section baz, "a". これはまた、実際にファイルからメモリにデータを読み取るために自動的にオンになるようです@progbits(objdump でマークされています)。LOAD安全のために手動で指定することもできます。詳細については、GAS のドキュメントを参照してください。

于 2011-01-31T12:54:00.153 に答える
1

編集: 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)読み取り専用で開始し、後でコピーされるように指定します)。

あなたがアセンブラーについて具体的に質問していたことは知っていますが、これは私があなたが求めていたと思っていたもののように聞こえました。

それが役に立てば幸い!

于 2011-01-31T09:25:48.570 に答える