交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
3 ELF节头表
分享
未结
0
1864
李延
LV6
2022-07-17
悬赏:20积分
# 1 ELF 节头表 elf节头表,位于elf文件的尾部,具体位置通过elf头中的e_shoff 来获取,并且数量通过e_shnum 来确定。 它相当于对于我们elf中节的每个条目的索引,它标记了节的每个条目在文件中的位置。 # 2 objdump查看 我们这次先通过objdump命令查看它的含义,理解具体含义后,再后头看它的二进制文件。 还是之前示例 ```sh objdump -h --wide main.o ``` 结果 ```sh main.o: file format elf64-x86-64 Sections: Idx Name Size VMA LMA File off Algn Flags 0 .text 00000015 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000000 0000000000000000 0000000000000000 00000055 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 0000000000000000 0000000000000000 00000055 2**0 ALLOC 3 .rodata 0000000e 0000000000000000 0000000000000000 00000055 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .comment 0000002e 0000000000000000 0000000000000000 00000063 2**0 CONTENTS, READONLY 5 .note.GNU-stack 00000000 0000000000000000 0000000000000000 00000091 2**0 CONTENTS, READONLY 6 .eh_frame 00000038 0000000000000000 0000000000000000 00000098 2**3 CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA ``` section,就是我们说的节头表 name 表示具体是哪个节的条目。比如:text就是存放执行代码的。data 就是存放全局变量的 size就是当前条目的大小。 file off就是在文件中的位置。 VMA就是在虚拟内存中的位置,目前不是可执行文件,所以没有 ## 2.1 查看完整节头表 ```sh readelf -S -W main.o ``` ## 2.2 不同节的保存内容 ![image-20220604220505348](https://www.lioyan.cn/data/image-20220604220505348.png) # 3 结构介绍 上面我们介绍了节头表的结构同样在elf.h文件中定义。我们看一下 ```c typedef struct { uint32_t sh_name; // 节区名称相对于字符串表的位置偏移 uint32_t sh_type; // 节区类型 uint64_t sh_flags; // 节区标志位集合 Elf64_Addr sh_addr; // 节区装入内存的地址 Elf64_Off sh_offset; // 节区相对于文件的位置偏移 uint64_t sh_size; // 节区内容大小 uint32_t sh_link; // 指定链接的节索引,与具体的节有关 uint32_t sh_info; // 指定附加信息 uint64_t sh_addralign; // 节装入内存的地址对齐要求 uint64_t sh_entsize; // 指定某些节的固定表大小,与具体的节有关 } Elf64_Shdr; ``` # 4 示例 我们依旧以之前代码做示例 ```c #include <stdio.h> int main(){ printf("Hello, World!\n"); return 0; } ``` ![image-20220717120314575](https://www.lioyan.cn/data/image-20220717120314575.png) 我们可以看到节头表位置为0x1950,大小为0x1D, 我们也可以通过命令查看,刚好是26个节 ![image-20220717120541371](https://www.lioyan.cn/data/image-20220717120541371.png)
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号