3

据我了解,这些是.section指令:

awxMSGT

如果使用 COFF 格式,则“旧”指令为“只读”。

如何使 ELF 格式的 .section 只读?根本没有说明符?

4

2 回答 2

5

是的,空标志使其只读(任何没有明确 w 可写标志的标志使其只读),例如您可以使用objdump进行验证。所以,.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
}

我在节规范中指定每个节在内存中的存储位置,用> flashor> sram来描述它是否在只读内存中(并且AT (_etext)指定它以只读方式开始并稍后复制)。

我知道你是专门询问汇编程序的,但这听起来像我认为你所要求的。

希望能帮助到你!

于 2011-01-31T09:25:48.570 回答