在GCC中,MEMORY命令描述目标中内存块的位置和大小。 该命令必须使用此way。
MEMORY
{
name [(attr)] : ORIGIN = origin, LENGTH = len
...
}
现在,我有一个链接器使用的链接器文件(基于GCC的Infineon Tricore微控制器链接器,tricore-ld)以这种方式定义RAM内存部分:
MEMORY
{
ram (w!xp): org = 0x70000000, len = 32k
...
}
你能解释一下'w!x p 中的'p'是什么意思吗? 'p'一般意味着什么?
答案 0 :(得分:1)
不是标准的链接描述文件,当然对于自定义微控制器目标来说并不罕见。也许是很久以前的分叉。然而,它可以很容易地进行逆向工程,GCC一直使用ELF格式的目标文件。谷歌“精灵部分属性”,弹出this hit,非常有用。
所以你得到了alloc,exec,write,progbits。啊哈,p == progbits。因此(w!xp)肯定应该被解释为“部分是可写的,不可执行的,初始数据存储在可执行映像中”。
没有什么特别的,这是C程序中传统的.data部分。与.bss相比,而不是p。
OP添加的信息:
从UNIX ELF格式的presentation:
PROGBITS:保存程序内容,包括代码,数据和调试器信息。
NOBITS:和PROGBITS一样。但是,它不占空间。
SYMTAB和DYNSYM:这些包含符号表。
STRTAB:这是一个字符串表,就像a.out中使用的那样。
REL和RELA:这些信息包含重定位信息。
DYNAMIC和HASH:它包含与动态链接相关的信息。