ELF文件结构

在这里插入图片描述
  ELF文件格式的最前部是 ELF文件头(ELF Header) ,包含整个文件的基本属性。然后是各个,ELF文件中与节有关的结构是 “节表(Section Header Table)”,节表描述ELF文件包含的所有节的信息。

文件头

elf.h中的自定义类型

自定义类型描述原始类型长度(字节)
Elf32_Addr32位版本程序地址uint32_t4
Elf32_Half32位版本的uint16_t2
Elf32_Off32位版本的偏移地址uint32_t4
Elf32_Sword32位版本有符号整型int32_t4
Elf32_Word32位版本无符号整型uint32_t4
Elf64_Addr64位版本程序地址uint64_t8
Elf64_Half64位版本无符号整型uint16_t2
Elf64_Off64位版本的偏移地址uint648
Elf64_Sword64位版本有符号整型int32_t4
Elf64_Word64位版本无符号整型uint32_t4

32位版本的文件头结构定义如下

#define EI_NIDENT 16struct Elf32_Ehdr            //共52个字节    //Ehdr表示ELF header
{unsigned char  e_ident[EI_NIDENT];Elf32_Half e_type;        //类型包括:可执行文件、可重定向文件、共享目标文件等Elf32_Half e_machine;     //有X86、arm之类Elf32_Word e_version;Elf32_Addr e_entry;       //可执行程序的入口地址Elf32_Off e_phoff;        //Program头表的偏移地址Elf32_Off e_shoff;        //Section头表的偏移地址Elf32_Word e_flags;Elf32_Half e_ehsize;      //本结构体的sizeElf32_Half e_phentsize;   //单个Program头的sizeElf32_Half e_phnum;       //Segment头表中Segment头的个数Elf32_Half e_shentsize;   //单个Section头的szieElf32_Half e_shnum;       //Section头表中Section头的个数Elf32_Half e_shstrndx;    //储存Section名字集合的Section的下标,指".shstrtab"的下标
};

节表

节表是保存节的基本属性的结构。

struct Elf32_Shdr              //共40个字节    //Shdl表示Section header
{Elf32_Word sh_name;        //所指向Section的名字,如".text"、".data"、".bss"等Elf32_Word sh_type;        //所指向Section的类型,如:符号表、字符串表等Elf32_Word sh_flags;       Elf32_Addr sh_addr;Elf32_Off sh_offset;       //所指向Section在ELF文件中的偏移量Elf32_Word sh_size;        //所指向Section的sizeElf32_Word sh_link;        //和其关联的Section头的下标索引Elf32_Word sh_info;Elf32_Word sh_addralign;   //字节对齐Elf32_Word sh_entsize;
};

节的类型(sh_type)
节的类型相关常量以SHT_开头

常量含义
SHT_NULL0无效段
SHT_PROGBITS1程序段。代码段、数据段都是这种类型的
SHT_SYMTAB2表示该段的内容为符号表
SHT_STRTAB3表示该段内容为字符串表
SHT_RELA4重定位表。包含重定位信息
SHT_HASH5符号表的哈希表
SHT_DYNAMIC6动态链接信息
SHT_NOTE7提示性信息
SHT_NOBITS8表示该段在文本中没内容
SHT_REL9包含重定位信息
SHT_SHLIB10保留
SHT_DNYSYM11动态链接

节的标志位(sh_flag)
标志位表示段在进程虚拟地址空间中的属性。

常量含义
SHF_WRITE1可写
SHF_ALLOC2该节在进程空间需要分配空间
SHF_EXECINSTR4该节在进程空间中可以执行

重定位表

  链接器在处理目标文件时,需要对目标文件中某些部位进行重定位,即代码段和数据段哪些对绝对地址的引用的位置。
  一个重定位表同时也是ELF的一个段,这个段的类型就是“SHT_REL”。

字符串表

  字符串长度往往是不定的,将字符串集中起来存放到一个表,然后使用字符串在表中的偏移来引用字符串。
  这种方式,在ELF文件中引用字符串只需要给出一个数字下标最为偏移即可。
  一般字符串表在ELF文件中也以段的形式保存,常见的段名为“.strtab”或“.shstrtab”。这两个字符串表分别为字符串表(String Table)和段表字符串表(Section Header String Table)。
  在ELF文件头中有一个字段e_shstrndx,它是 “Section header string table index” 的缩写,是段表字符串表在段表中的索引下标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

layui时间选择器选择周 日月季度年

<!-- layui框架样式 --><link type"text/css" href"/static/plugins/layui/css/layui.css" rel"stylesheet" /><!-- layui框架js --><script type"text/javascript" src"/static/plugins/layui/layui.js&qu…

MYSQL面试知识点手册

第一部分&#xff1a;MySQL 基础知识 1.1 MySQL 简介 MySQL 是世界上最流行的开源关系型数据库管理系统之一&#xff0c;它以性能卓越、稳定可靠和易用性而闻名。MySQL 主要应用在 Web 开发、大型互联网公司、企业级应用等场景&#xff0c;且广泛用于构建高并发、高可用的数据…

Qt_多元素控件

目录 1、认识多元素控件 2、QListWidget 2.1 使用QListWidget 3、QTableWidget 3.1 使用QListWidget 4、QTreeWidget 4.1 使用QTreeWidget 5、QGroupBox 5.1 使用QGroupBox 6、QTabWidget 6.1 使用QTabWidget 结语 前言&#xff1a; 在Qt中&#xff0c;控件之间…

GAMES104:15 游戏引擎的玩法系统基础-学习笔记

文章目录 0&#xff0c;游戏性课程框架一&#xff0c;事件机制1.1 事件的定义1.2 callback的注册1.3 事件的分发系统 二&#xff0c;游戏逻辑与脚本系统2.1 特点和常见脚本语言2.2 脚本语言的GO管理2.3 脚本语言的架构2.4 可视化脚本 三&#xff0c;Gameplay 开发中的3C &#…

Zookeeper安装使用教程

# 安装 官网下载安装包 #配置文件 端口默认8080&#xff0c;可能需要更改一下 #启动 cd /Users/lisongsong/software/apache-zookeeper-3.7.2-bin/bin ./zkServer.sh start #查看运行状态 ./zkServer.sh status #停止 ./zkServer.sh stop #启动客户端 ./zkCli.sh ls /

深度学习之图像数据集增强(Data Augmentation)

文章目录 一、 数据增强概述二、python实现传统数据增强参考文献 一、 数据增强概述 数据增强&#xff08;Data Augmentation&#xff09;是一种技术&#xff0c;通过对现有数据进行各种变换和处理来生成新的训练样本&#xff0c;从而增加数据集的多样性和数量。这些变换可以是…

vue part 11

vuex的模块化与namespace 115_尚硅谷Vue技术_vuex模块化namespace_1_哔哩哔哩_bilibili 116_尚硅谷Vue技术_vuex模块化namespace_2_哔哩哔哩_bilibili vue-router路由 很常见的很重要的应用&#xff1a;Ajax请求&#xff0c;将响应的数据替换掉原先的代码从而实现不跳转页面…

网站SEO,该如何规范目标网站URL配置!

随着互联网技术的飞速发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;在网站建设和运营中的重要性日益凸显。优化目标网站的URL配置&#xff0c;作为SEO策略中的关键环节&#xff0c;对于提升网站在搜索引擎中的排名和曝光度具有至关重要的作用。大连蝙蝠侠科技将从U…

滚珠花键与滚珠丝杆的区别与应用

在机械工业中&#xff0c;经常使用滚珠花键这种传动元件&#xff0c;人们经常拿它与滚珠丝杆相比较&#xff0c;甚至与之混淆。事实上&#xff0c;它们是不同的&#xff0c;滚珠花键和滚珠丝杆在机械传动领域中各有其独特的作用和特点。那么&#xff0c;两者之间的区别是什么呢…

【Spring】IocDI详解(6)

本系列共涉及4个框架&#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。 博客涉及框架的重要知识点&#xff0c;根据序号学习即可。 有什么不懂的都可以问我&#xff0c;看到消息会回复的&#xff0c;可能会不及时&#xff0c;请见谅&#xff01;&#xff01; 目录 本系列共…

Excel 国产化替换新方案

前言 在当前数字化转型和信创&#xff08;信息技术应用创新&#xff09;战略背景下&#xff0c;企业对于安全性、自主可控性和高效办公工具的需求日益增加。作为一款国产自主研发的高性能表格控件&#xff0c;SpreadJS 正成为替换 Excel 的最佳选择。它不仅全面支持国产化认证…

头部姿态估计代码+教程

前言 头部姿态估计是计算机视觉中的一个具有挑战性的问题&#xff0c;因为它需要完成多个步骤。首先&#xff0c;我们需要在画面中定位人脸&#xff0c;然后识别出各种面部特征点。如今&#xff0c;当人脸正对摄像头时&#xff0c;识别人脸似乎是一个简单的任务。但问题在于&am…

PCIe进阶之TL:First/Last DW Byte Enables Rules Traffic Class Field

1 First/Last DW Byte Enables Rules & Attributes Field 1.1 First/Last DW Byte Enables Rules Byte Enable 包含在 Memory、I/O 和 Configuration Request 中。本文定义了相应的规则。Byte Enable 位于 header 的 byte 7 。对于 TH 字段值为 1 的 Memory Read Request…

计算机网络27、28——Linux命令1、2

1、虚拟机网络前方路径内容 用户名机器名&#xff1a;/$ $表示普通用户&#xff0c;#表示root用户 2、Linux不分盘&#xff0c;都是绝对路径 /表示根目录&#xff0c;表示计算机文件夹下 ~是当前用户的家&#xff0c;表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…

信息收集常用指令

目的 本文主要是记录一些在信息搜集时&#xff0c;常用的提高搜索效率的命令。 后续会继续记录一些用到的更多指令和方法&#xff0c;慢慢更新。 1、inurl “inurl:xxx”是指查找url中包含xxx的网页。 URL&#xff1a;统一资源定位符。统一资源定位系统。可以说包含域名&am…

【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums &#xff0c;和一个查询数组 requests &#xff0c;其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 &#xff0c;starti 和 endi 数组索引都是 从 0 开始 的。 你可以任意排列…

查看TCP/UDP网络连接通信情况

绪论​ “宿命论是那些缺乏意志力的弱者的借口。 ——罗曼&#xff0e;罗兰” 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 主要使用&#xff1a; nestat -nltp n 拒绝显示别名&#xff0c;能显示数字的全部转化成数字l 仅列出有在 Listen (…

动态SQL中的foreach标签【后端 21】

动态SQL中的foreach标签 在Java开发中&#xff0c;特别是在使用MyBatis进行数据库操作时&#xff0c;动态SQL是一项非常强大的功能。MyBatis的<foreach>标签就是动态SQL中最为常用的一个&#xff0c;主要用于处理包含IN子句的查询或者批量插入等操作。本文将详细介绍<…

《程序猿之设计模式实战 · 策略模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

论文内容分类与检测系统源码分享

论文内容分类与检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…