Gcc 在elf文件中,`.rodata.str1.8`节是什么意思

Gcc 在elf文件中,`.rodata.str1.8`节是什么意思,gcc,elf,Gcc,Elf,我知道.rodata部分将常量数据存储在ELF文件中。但是,当我转储内核模块的ELF时,我注意到有两个额外的部分名为rodata.str1.8和rodata.str1.1。这两个部分似乎也存储常量变量和字符串。但是这三个rodata之间到底有什么区别呢?它看起来像.rodata.str1.1有没有对齐要求的字符串,而.rodata.str1.8必须是8字节对齐的。如果查看带有readelf的ELF文件,这是可见的: Section Headers: [Nr] Name

我知道
.rodata
部分将常量数据存储在ELF文件中。但是,当我转储内核模块的ELF时,我注意到有两个额外的部分名为
rodata.str1.8
rodata.str1.1
。这两个部分似乎也存储常量变量和字符串。但是这三个
rodata
之间到底有什么区别呢?

它看起来像
.rodata.str1.1
有没有对齐要求的字符串,而
.rodata.str1.8
必须是8字节对齐的。如果查看带有
readelf
的ELF文件,这是可见的:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        00000000 000034 000050 00  AX  0   0  4
  [ 2] .rela.text        RELA            00000000 000184 000030 0c   I  8   1  4
  [ 3] .data             PROGBITS        00000000 000084 000000 00  WA  0   0  1
  [ 4] .bss              NOBITS          00000000 000084 000000 00  WA  0   0  1
  [ 5] .rodata.str1.8    PROGBITS        00000000 000088 000010 01 AMS  0   0  8   <---
  [ 6] .comment          PROGBITS        00000000 000098 000019 01  MS  0   0  1
  [ 7] .shstrtab         STRTAB          00000000 0001b4 000049 00      0   0  1
  [ 8] .symtab           SYMTAB          00000000 0000b4 0000a0 10      9   7  4
  [ 9] .strtab           STRTAB          00000000 000154 00002f 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)
节头:
[Nr]名称类型地址尺寸ES Flg Lk Inf Al
[0]空0000000000000000000
[1].文本程序00000000 000034 0000500 AX 0 0 4
[2].rela.text rela 00000000 000184 000030 0c I 8 1 4
[3].数据程序00000000 000084 00000000 WA 0 1
[4].bss NOBITS 00000000 000084 00000000 WA 0 1
[5].rodata.str1.8程序00000000 000088 00001001 AMS 0 8