如何使用sh_addralign?

时间:2017-09-27 11:40:40

标签: c linux binary elf

我正在使用elf阅读器,我无法理解elf doc中“sh_addralign”的用途。它如下所示

  

某些部分具有地址对齐约束。对于   例如,如果某个部分包含双字,则系统必须确保   整个部分的双字对齐。也就是说,价值   sh_addr必须与0一致,以sh_addralign的值为模。   目前,只允许0和2的正整数幂。   值0和1表示该部分没有对齐约束。 “

有人可以通过一些计算来解释我吗?以及为什么它很重要?

2 个答案:

答案 0 :(得分:0)

  

我正在为精灵读者工作,我无法理解" sh_addralign"

的目的

对于ELF 阅读器sh_addralign没有用处。

它的唯一目的是告诉链接器(写入 ELF)它必须安排部分内容在内存中正确对齐。

答案 1 :(得分:0)

该部分的原始创建者期望该对齐方式。

例如,如果它为0,则创建者不知道或不在乎。如果它是一个字符串表,则创建者可以使用1,但可以使用0、1、2、4、8...。如果,如示例中所示,该部分包含一个双精度字,那么创建者可以说8、16..。 ..如果是RISC-V文本,则对齐方式为4。如果使用高速缓存行感知代码处理该部分,则可能需要64字节对齐。

只有创建者知道这些要求,并且他们期望链中的下一个工具尊重这些对齐方式。回想一下ELF是在90年代中期制定的。如今,有了GB内存,浪费少量对齐空间以获得更好的性能是一个很好的权衡。阅读该内容以作为过度对齐的建议。