我的链接器文件中的内存属性'p'是什么?

时间:2016-10-10 12:19:36

标签: c ld linker-scripts

在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'一般意味着什么?

1 个答案:

答案 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:它包含与动态链接相关的信息。