我的链接器文件中的内存属性 'p' 是什么?
What is the memory attribute 'p' in my linker file?
在 GCC 中,MEMORY 命令描述目标中内存块的位置和大小。
命令必须用这个way.
MEMORY
{
name [(attr)] : ORIGIN = origin, LENGTH = len
...
}
现在,我有一个链接器使用的链接器文件(用于英飞凌 Tricore 微控制器的基于 GCC 的链接器,tricore-ld)以这种方式定义 RAM 内存部分:
MEMORY
{
ram (w!xp): org = 0x70000000, len = 32k
...
}
你能解释一下 'p' 在 (w!xp) 中的意思吗? 'p' 通常是什么意思?
不是标准的链接描述文件,当然对于自定义微控制器目标来说并不罕见。也许很久以前就分叉了。然而,它可以很容易地进行逆向工程,GCC 一直对目标文件使用 ELF 格式。 Google "elf section attributes",弹出 this hit,在这里很有帮助。
所以你得到了 alloc、exec、write、progbits。啊哈,p == progbits。所以 (w!xp) 肯定应该解释为 "section is writable, not executable, initial data is stored in the executable image".
没什么特别的,那是 C 程序中的传统 .data 部分。比较 .bss,而不是 p.
OP 添加的信息:
从这个 presentation 关于 UNIX ELF 格式:
PROGBITS:保存程序内容,包括代码、数据和调试器信息。
NOBITS:和 PROGBITS 一样。但是,它不占用 space。
SYMTAB 和 DYNSYM:它们包含符号 table。
STRTAB:这是一个字符串 table,就像在 a.out.
中使用的一样
REL 和 RELA:它们包含重定位信息。
DYNAMIC 和 HASH:这包含与动态链接相关的信息。
在 GCC 中,MEMORY 命令描述目标中内存块的位置和大小。 命令必须用这个way.
MEMORY
{
name [(attr)] : ORIGIN = origin, LENGTH = len
...
}
现在,我有一个链接器使用的链接器文件(用于英飞凌 Tricore 微控制器的基于 GCC 的链接器,tricore-ld)以这种方式定义 RAM 内存部分:
MEMORY
{
ram (w!xp): org = 0x70000000, len = 32k
...
}
你能解释一下 'p' 在 (w!xp) 中的意思吗? 'p' 通常是什么意思?
不是标准的链接描述文件,当然对于自定义微控制器目标来说并不罕见。也许很久以前就分叉了。然而,它可以很容易地进行逆向工程,GCC 一直对目标文件使用 ELF 格式。 Google "elf section attributes",弹出 this hit,在这里很有帮助。
所以你得到了 alloc、exec、write、progbits。啊哈,p == progbits。所以 (w!xp) 肯定应该解释为 "section is writable, not executable, initial data is stored in the executable image".
没什么特别的,那是 C 程序中的传统 .data 部分。比较 .bss,而不是 p.
OP 添加的信息:
从这个 presentation 关于 UNIX ELF 格式:
PROGBITS:保存程序内容,包括代码、数据和调试器信息。
NOBITS:和 PROGBITS 一样。但是,它不占用 space。
SYMTAB 和 DYNSYM:它们包含符号 table。
STRTAB:这是一个字符串 table,就像在 a.out.
中使用的一样
REL 和 RELA:它们包含重定位信息。
DYNAMIC 和 HASH:这包含与动态链接相关的信息。