有人可以解释这些列的含义吗?
我使用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
...
...
预先感谢
答案 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_SYMTAB
和SHT_DYNSYN
部分的符号大小)>
lk
是sh_link
,info
是sh_info
,其含义取决于节类型
(示例:sh_link
包含节标题索引,其中包含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
。
如果要精确描述结构,请检查链接。