3

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

例如什么是'ES'、'Lk'和'Info'?
'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
...
...

提前致谢,

4

1 回答 1

0

这是System V 应用程序二进制接口的链接,其中定义了节标题:

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节)

lkis sh_link, infois sh_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

正如你所写al的是sh_align

如果您想要结构的精确描述,请查看链接。

于 2019-11-12T18:16:11.960 回答