据我了解,这些是.section
指令:
awxMSGT
如果使用 COFF 格式,则“旧”指令为“只读”。
如何使 ELF 格式的 .section 只读?根本没有说明符?
据我了解,这些是.section
指令:
awxMSGT
如果使用 COFF 格式,则“旧”指令为“只读”。
如何使 ELF 格式的 .section 只读?根本没有说明符?
是的,空标志使其只读(任何没有明确 w 可写标志的标志使其只读),例如您可以使用objdump进行验证。所以,.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
or> sram
来描述它是否在只读内存中(并且AT (_etext)
指定它以只读方式开始并稍后复制)。
我知道你是专门询问汇编程序的,但这听起来像我认为你所要求的。
希望能帮助到你!