有人可以解释一下这些列的含义吗?
我使用 readelf 读取一个 ELF 文件,但找不到任何关于节标题列的相关信息(例如 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
...
...
提前致谢
最佳答案
这是 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
,它指定了 header 包含的条目的大小(例如:SHT_SYMTAB
的符号大小和SHT_DYNSYN
节)
lk
是sh_link
,info
是sh_info
,它们的含义取决于section类型
(例如:sh_link
包含部分 header 索引以及 SHT_SYMTAB
和 SHT_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
。
如果您想要结构的精确描述,请查看链接。
关于gnu - 在检查节标题时,readelf 显示的列的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56935718/