数据和data1部分之间有什么区别,以及ELF文件中rodata和rodata1部分之间的区别是什么?

时间:2014-07-01 08:39:03

标签: linker elf

我在这里查看了ELF规范http://www.cs.cmu.edu/afs/cs/academic/class/15213-f00/docs/elf.pdf但是,没有提到差异。

3 个答案:

答案 0 :(得分:2)

我没有找到强制执行此操作的单个文档,但.rodata1通常在以.rodata开头的所有内容之后出现。您可以查看系统上的链接描述文件来验证这一点(通常是/ usr / lib / ldscripts /)。

这使得一些很好的事情成为可能,比如在本节中为校验和放置一个变量。这确保了它后面剩下的只读内容,然后工具可以计算校验和并将其修补到二进制文件中。

在运行时,您可以根据校验和检查代码。对于PC来说这听起来很愚蠢,但它在嵌入式固件中很常见。 我猜这个部分的动机是有一个部分"外面"由于各种原因编译器生成的代码,但从未完全记录。

答案 1 :(得分:1)

据我所知,他们是一样的。

它还依赖于编译器。有些编译器会将这2个部分(可能还有更多部分)连接成" .data"。

答案 2 :(得分:0)

从binutils-gdb来源的一些git考古学来看,它看起来像:

commit 252b5132c753(“ 19990502源软件导入”)具有一个差异,其中提到:

+Fri Jul 23 13:51:09 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)
+
+       * scripttempl/elf.sc: Add support for .init, .fini, .ctors,
+       .dtors, .data1, .rodata1 sections, instead of combining them into
+       other sections.  For `-r', set all section start addresses to
+       zero.

是我可以找到的最早参考。我怀疑binutils当时已嫁接到gdb的源代码中。我似乎找不到26年前存在的预导入资源。看来他们的邮件存档始于1999年。rodata1的错误跟踪器中没有错误。