据我了解,这些是.section
指令:
awxMSGT
如果使用COFF格式,则“旧”指令具有“只读”。
如何将ELF格式的.section只读?根本没有说明者?
答案 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)”指定它以只读方式启动并稍后复制。)
我知道你特意询问汇编程序,但这听起来像我认为你要求的那样。
希望它有所帮助!