如何使用GNU GAS只读取ELF格式的.section?

时间:2011-01-31 09:13:14

标签: gnu elf assembly

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

awxMSGT

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

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

2 个答案:

答案 0 :(得分:3)

是的,空标志使其只读(任何没有显式w的可写标记使其只读),因为您可以验证,例如使用 objdump 。 因此,.section foo.section bar, ""都会创建只读部分。你可能想让它可分配,所以像.section baz, "a"这样的东西。这似乎也会自动打开@progbits(在objdump中标记为LOAD)以实际将文件中的数据读入内存。您也可以手动指定安全方面。有关详细信息,请参阅GAS documentation

答案 1 :(得分:1)

编辑:看一下GNU AS信息,我在下面写了一些答案。我很确定,就像在我的链接器脚本示例中一样,保留“w”会将此部分视为不可写入。


很抱歉,如果这完全不是您要求的。这听起来不错,所以我抓了它!

因此,如果您正在谈论链接器,那么我认为您所寻找的是链接器脚本的“内存”区域。

例如:

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
}

我在>部分规范中指定每个部分存储在内存中的位置。闪光或> sram描述它是否在只读存储器中(并且“AT(_etext)”指定它以只读方式启动并稍后复制。)

我知道你特意询问汇编程序,但这听起来像我认为你要求的那样。

希望它有所帮助!