ELF文件内容详解——各节内容分析

文章目录

  • 写在前面
  • 准备
  • .text节
  • .data节
  • .strtab
  • .symtab
  • .shstrtab
  • .shstrtab之后

写在前面

只看readelf这个工具说实话我感觉还是有点云里雾里,这里就逐字节分析一下ELF文件中text节(代码段)的内容
本文分析使用的汇编程序ELF文件内容详解这篇文章

准备

hexdump -Cv filename 以经典的格式打印出十六进制的文件内容,且不省略全零行
objdump -d filename 反汇编

.text节

在这里插入图片描述
在右图上我们可以看到:text段在此ELF文件中的起始地址是0xb0,长度是0x27,
在左边的十六进制内容中,我们圈出了0xb0 — 0xd6地址处的内容,是什么呢?

在这里插入图片描述
通过和反汇编的结果对比可以看出:
text段的内容就是十六进制格式的汇编指令

.data节

在这里插入图片描述
首先观察右上的readelf工具输出,可以看到data段从0xd7位置开始,长度是0xd个字节,那么data段的内容就是左边白色高亮的部分,
再看汇编代码与od工具的输出,可以看到是我们定义的hello world~这12个字符,再加上最后结尾的空字符\0

.strtab

先讲后面的strtab再讲前面的symtab,因为symtab的st_name属性依赖于strtab
在这里插入图片描述
观察hexdump右侧的打印,可以看到:
strtab这里存放的是程序中出现的字符串

.symtab

大名鼎鼎的 符号表
在这里插入图片描述
symtab的Aglin是8,它要按照8字节对齐
所以符号表并不是从data段的末尾0xe4处直接开始的,而是空了4个字节,从0xe8处开始

符号表分析比text段和data段要复杂一些,这是elf.h中对64位下符号表的定义:
在这里插入图片描述
可以看出符号表的格式:

st_namest_infost_otherst_shndxst_valuest_size
4字节1字节1字节2字节8字节8字节
一共24字节

我们看下_start这个符号:
在这里插入图片描述
它位于符号表的第8个,那么_start的起始地址就在0xe8+3*24=0x1a8的位置处
在这里插入图片描述
st_name:符号的名称;在strtab中保存,这里的值是在strtab中的偏移量
上述_start符号的st_name值是0x2d,那么_start符号的名称应该位于0x208+0x2d=0x235处
在这里插入图片描述在这里插入图片描述
经对比可以看到,0x235至下一个\0字符处保存的确实是_start的ASCII码值

st_info:符号的类型和绑定属性,高4位表示notype、object、func等,低4位表示local、global、weak等

st_other:通常用于指定符号的其他属性,但在许多情况下它并未使用,并被设置为0(不懂)

st_shndx:这个字段指示了符号所在的段(或节)在节头表中的索引。段或节是目标文件中代码、数据等的逻辑分组。
作用:它提供了符号在内存中的位置信息,这对于链接器和加载器在加载和执行程序时定位符号非常重要。

st_value:表示符号的值。对于可重定位的目标文件,它通常是符号相对于其所在段起始位置的偏移量。对于可执行文件,它表示符号在虚拟地址空间中的地址。
上述_start符号的value是0x4000b0就意味着运行时它会被加载到虚拟地址的0x4000b0处

st_size:表示符号的大小,即符号所代表的值或数据的字节数。

.shstrtab

这里存放的是各节的名称
在这里插入图片描述




.shstrtab之后

上面的几个section都已经分析完了,但是后面明显还有一大段二进制内容,是什么呢?


谜底啊,就在谜面上
在这里插入图片描述
shstrtab里存放的是节头表的内容,就是上述的这些数据,有空的话我会写一下,现在先把节头表的定义放在这里,大家可以自己分析下

在这里插入图片描述

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

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

相关文章

Redis之缓存雪崩问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 锁2. 不同的过期时间3. 缓存预热和定时任务 一、书接上文 Redis之缓存穿透问题解决方案实践SpringBoot3Docker 二、介绍 缓存雪崩,指大量的缓存失效,大量的请求又同时落在数据库。主要的一种诱因是key设…

【Java面试】MQ(Message Queue)消息队列

目录 一、MQ介绍二、MQ的使用1应用解耦2异步处理3流量削峰4日志处理5消息通讯三、使用 MQ 的缺陷1.系统可用性降低:2.系统复杂性变高3.一致性问题四、常用的 MQActiveMQ:RabbitMQ:RocketMQ:Kafka:五、如何保证MQ的高可用?ActiveMQ:RabbitMQ:RocketMQ:Kafka:六、如何保…

数据湖Iceberg、Hudi和Paimon比较

1.社区发展现状 项目Apache IcebergApache HudiApache Paimon开源时间2018/11/62019/1/172023/3/12LicenseApache-2.0Apache-2.0Apache-2.0Github Watch1481.2k70Github Star5.3k4.9k 1.7k Github Fork1.9k2.3k702Github issue(Open)898481263Github issue(closed)20542410488…

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器,centos8.2系统,docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …

小红书x-s算法及补环境 单旋转验证码

前言 大家好呀!新的一年,先祝大家新年快乐咯.祝大家逆向,风控都一把过咯. 新年第一篇文章,后续会持续更新哦! 春晚见证了中国经济的新风口,今年春晚互联网企业赞助商就两家,小红书和京东.小红书类似国外的ins,有预感未来小红书会大火,所以写了这篇文章,有需要的加我,联系方式…

MySQL多实例部署:从概念到实操的全面指南

目录 MySQL多实例管理 单实例 什么是多实例 多实例的好处 多实例的弊端 MySQL多实例用在哪些场景 资金紧张的公司 用户并发访问量不大的业务 大型网站也有用多实例 部署MySQL多实例 rpm和源码的优缺点 二进制方式安装mysql 准备二进制mysql运行所需的环境 准备多…

让 K8s 更简单!8款你不得不知的 AI 工具-Part 2

在 part 1 中,我们探讨了目前比较流行的四种 OpenAI 开源工具。在今天的 part 2 中我们将探究另外三种不同的 OpenAI 开源工具并介绍一些与 Appilot 相关的内容。 Kubectl-GPT Kubectl-GPT 是一个 kubectl 插件,可使用 GPT 模型从自然语言输入生成 kube…

MySQL加锁策略详解

我们主要从三个方面来讨论这个问题: 啥时候加?如何加?什么时候该加什么时候不该加? 1、啥时候加 1.1 显式锁 MySQL 的加锁可以分为显式加锁和隐式加锁,显式加锁我们比较好识别的,因为他往往直接体现在 S…

【Git工具实战】实用真实 Git 开发工作流程

前言 最近工作中发现,很多开发人员连最基本的Git怎么使用都不知道,比如什么时候切分支,什么时候合并代码,代码遇到冲突怎么办,经常出现掉代码,代码合并后丢失的情况。以下为个人总结的常规Git开发工作流程…

创建型设计模式 - 原型设计模式 - JAVA

原型设计模式 一 .简介二. 案例三. 补充知识 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一 .简介 原型模式提供了一种机制,可以将原始对象复制到新对象&#xff0…

什么是车规级芯片?车规级芯片之NCV8450ASTT3G 自保护高压侧驱动器

关于车规级芯片: 关于车规级芯片(Automotive Grade Chip),车规级芯片是专门用于汽车行业的芯片,具有高可靠性、高稳定性和低功耗等特点,以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元&…

mysql优化指南之原理篇

之前碰到一个线上问题,在接手一个同事的项目后,因为工期比较赶,我还没来得及了解业务背景和大致实现,只是了解了上线发布的顺序和验证方式就进行了上线,在上线进行金丝雀的时候系统还没发生什么异常,于是我…

数据结构D3作业

1. 2. 按位插入 void insert_pos(seq_p L,datatype num,int pos) { if(LNULL) { printf("入参为空,请检查\n"); return; } if(seq_full(L)1) { printf("表已满,不能插入\n"); …

ArcgisForJS如何使用ArcGIS Server发布的切片地图服务?

文章目录 0.引言1.准备海量地理数据2.ArcGIS Server发布切片地图服务3.ArcgisForJS使用ArcGIS Server发布的切片地图服务 0.引言 ArcGIS Server是一个由Esri开发的地理信息系统(GIS)服务器软件,它提供了许多功能,包括发布切片地图…

ES项目应用

配置: ES存储了2-3亿条,几百GB ES集群有5 个节点 2主2副 ES返回数据量窗口大小设置 index.max_result_window 深度翻页 1.from size 方式 2.scroll相当于维护了一份当前索引段的快照信息,这个快照信息是你执行这个scroll查询时的快照。在这个查询后的任…

JavaScript原型继承与面向对象编程思想

原型继承与面向对象编程思想 在JavaScript中,原型(prototype)、构造函数(constructor)和实例对象(instance)是面向对象编程中的重要概念,并且它们之间存在着紧密的关系。 原型(prototype):原型是JavaScript中对象之间关联的一种机制。每个Ja…

grid新建主从一对多

目录 总结一、步骤前端1.第一步-编写tabs的modelBody2.第二步编辑表扩展js 后端--重写表的add和Update方法1.第一步 总结 编写tabs的modelBody后编辑表扩展js在重写后端partial的Service 一、步骤 前端 1.第一步-编写tabs的modelBody 复制下面代码该改的改 <template&…

Leetcoder Day17| 二叉树 part06

语言&#xff1a;Java/C 654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 …

PLC设置网口通讯的原因

PLC设置网口通讯功能&#xff0c;是现场总线向工业以太网的迈进&#xff0c;更是为了在网口之上构建更为庞大、开放的大一统的生态系统。 有了以太网&#xff0c;特别是TCP/IP协议后&#xff0c;全员工控人的日常工作更为便利了。 主要体现在以下4点&#xff1a; 1.再也不需要…

linux逻辑卷/dev/mapper/centos-root扩容增加空间

centos7中/dev/mapper/centos-root扩容 问题文件系统根目录&#xff0c;/dev/mapper/centos-root空间满了&#xff0c;导致k8s不停重启 1.查看磁盘情况 df -h #查看最大占用目录 du -h -x --max-depth12.查看磁盘信息 fdisk -l3.查看磁盘分区层级 lsblk可见剩余空闲60G空间…