在查看节标题时,readelf显示的列的含义是什么?

时间:2019-07-08 13:13:12

标签: gnu readelf

有人可以解释这些列的含义吗?
我使用readelf来读取ELF文件,并且找不到有关Section Headers列的任何相关信息(例如objdump)。

例如什么是“ ES”,“ Lk”和“信息”?
'Flg'中所有可用的标志是什么?
“ Al”表示对齐?

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .data             PROGBITS        3ffe8000 000120 0004fa 00  WA  0   0 16
  [ 2] .rodata           PROGBITS        3ffe8500 000620 000ea4 00   A  0   0 16
  [ 3] .bss              NOBITS          3ffe93a8 0014c8 0089d0 00  WA  0   0 16
...
...

预先感谢

1 个答案:

答案 0 :(得分:0)

这里是指向System V Application Binary Interface 的链接,其中定义了节标题:

typedef struct {
    Elf64_Word  sh_name;
    Elf64_Word  sh_type;
    Elf64_Xword sh_flags;
    Elf64_Addr  sh_addr;
    Elf64_Off   sh_offset;
    Elf64_Xword sh_size;
    Elf64_Word  sh_link;
    Elf64_Word  sh_info;
    Elf64_Xword sh_addralign;
    Elf64_Xword sh_entsize;
} Elf64_Shdr;

es实际上是sh_entsize,它指定标题包含的条目的大小(例如:SHT_SYMTABSHT_DYNSYN部分的符号大小)

lksh_linkinfosh_info,其含义取决于节类型 (示例:sh_link包含节标题索引,其中包含SHT_SYMTABSHT_DYNSYN节的关联字符串表,sh_info通常也只是标题表索引)

这些是标准定义的标志:

SHF_WRITE             0x1
SHF_ALLOC             0x2
SHF_EXECINSTR         0x4
SHF_MERGE             0x10
SHF_STRINGS           0x20
SHF_INFO_LINK         0x40
SHF_LINK_ORDER        0x80
SHF_OS_NONCONFORMING  0x100
SHF_GROUP             0x200
SHF_TLS               0x400
SHF_COMPRESSED        0x800

您写的alsh_align

如果要精确描述结构,请检查链接。