我在这里查看了ELF规范http://www.cs.cmu.edu/afs/cs/academic/class/15213-f00/docs/elf.pdf但是,没有提到差异。
答案 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
的错误跟踪器中没有错误。