【Linux之·readelf工具·二进制程序处理工具】

系列文章目录


文章目录

  • 前言
  • 一、使用readelf工具查看程序代码变量的内存空间布局情况
    • 1.1 源程序与程序的映射
    • 1.2 程序到进程的映射
  • 二、readelf指令
    • 2.1 节头信息
    • 2.2符号表段中的项
  • 总结


前言

  在现代软件开发中,了解和理解可执行文件和共享库的结构变得越来越重要。而readelf工具正是一个强大的工具,它能够帮助开发人员深入了解和分析可执行文件和共享库的结构和内容。通过readelf工具,我们可以获取有关文件的一些重要信息,如符号表、节区、动态链接等等。我们将从基础知识开始,介绍readelf工具的原理和功能。从而使读者能够更好地理解和分析可执行文件和共享库。无论是在调试、优化代码性能还是进行漏洞分析,掌握readelf工具都将为我们提供强大的工具和洞察力。


一、使用readelf工具查看程序代码变量的内存空间布局情况

1.1 源程序与程序的映射

描述
BSS段存放未初始化的全局变量或静态变量,Block Started by Symbol
DATA段存放已初始化的变量
TEXT段存放二进制代码

1.2 程序到进程的映射

描述
程序代码区存放函数体二进制代码
常量区存放常量、字符串等,只读
全局数据区存放全局变量、静态变量等,可读可写
堆区存放进程运行中被动态分配的内存段,可动态扩展或缩减
动态链接库用于在程序运行期间加载和卸载动态链接库
栈区存放函数的参数值局部变量的值等
#include<stdio.h>int v1;
int v2 = 0;
static int v3;
static int v4 = 4;int main(void)
{int v5;return 0;
}

v1、v2、v3都是未初始化的全局变量,所以在BSS段
v4为已初始化的全局变量,所以在DATA段
v5位局部变量,存储在栈(stack) 中。

注意: 未初始化的全局变量和静态变量以及被初始化为0的全局和静态变量

二、readelf指令

在Linux中,可以使用readelf指令来查看相应的信息。ELF(The Executable and Linking Format),是Linux的主要可执行文件格式,包含三种:

  • 可执行文件(.out)
  • 可重定位文件(.o)
  • 共享目标文件(.so)

readelf指令参数说明表:

指令描述
readelf -helf header,头文件信息
readelf -lprogram headers,显示程序头 (段头) 信息
readelf -Ssection headers,显示节头信息
readelf -ssymbols,显示符号表段中的项
readelf -rrelocs,显示可重定位段的信息
readelf -ddynamic,显示动态段的信息
readelf -Vversion-info,显示版本段的信息
readelf -Aarch-specific,显示CPU构架信息
readelf -Ihistogram,显示符号的时候,显示bucket list长度的柱状图
readelf -aall 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I

2.1 节头信息

There are 28 section headers, starting at offset 0x1950:节头:[] 名称              类型             地址              偏移量大小              全体大小          旗标   链接   信息   对齐
......[13] .text             PROGBITS         00000000000004f0  000004f00000000000000192  0000000000000000  AX       0     0     16
......[15] .rodata           PROGBITS         0000000000000690  000006900000000000000004  0000000000000004  AM       0     0     4
......[22] .data             PROGBITS         0000000000201000  000010000000000000000014  0000000000000000  WA       0     0     8[23] .bss              NOBITS           0000000000201014  000010140000000000000014  0000000000000000  WA       0     0     4

2.2符号表段中的项

   Num:    Value          Size Type    Bind   Vis      Ndx Name......34: 000000000020101c     4 OBJECT  LOCAL  DEFAULT   23 v335: 0000000000201010     4 OBJECT  LOCAL  DEFAULT   22 v4......51: 0000000000201020     4 OBJECT  GLOBAL DEFAULT   23 v1......64: 0000000000201018     4 OBJECT  GLOBAL DEFAULT   23 v2
#include<stdio.h>int v1;
int v2 = 0;
static int v3;
static int v4 = 4;int main(void)
{int v5;return 0;
}
  • v1: 未初始化变量,是一个GLOBAL符号,地址为0000000000201020,从Section Headers可以看到这个地址位于bss段;
  • v2: 初始化变量为0,是一个GLOBAL符号,地址为0000000000201018,从Section Headers可以看到这个地址位于bss段;
  • v3: 未初始化变量,但是被static修饰,所以为LOCAL,地址为000000000020101c,从Section Headers可以看到这个地址位于bss段;
  • v4: 初始化变量为非0,但是被static修饰,所以为LOCAL,地址为0000000000201010,从Section Headers可以看到这个地址位于data段。

总结

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

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

相关文章

免费,C++蓝桥杯比赛历年真题--第14届蓝桥杯省赛真题(含答案解析和代码)

C蓝桥杯比赛历年真题–第14届蓝桥杯省赛真题 一、选择题 答案&#xff1a;A 解析&#xff1a; C中 bool 类型与 char 类型一样&#xff0c;都需要1 byte。一些其他类型的占用字节数:short:2 byte&#xff0c;int:4byte&#xff0c;long long:8 byte&#xff0c;double:8byte&…

探究MySQL中的“树”结构

1 引言 树高千丈,叶落求索 – 唐代杜牧 树结构在MySQL中常用于表示层次关系,如组织结构或分类体系。引入树结构可使数据之间建立父子关系,便于查询和管理。益处包括快速检索子节点、方便展示层次关系、支持递归查询等。 2 基础概念 2.1 名词解析 程序就像是一张有向图,你…

Linux操作系统:Spark在虚拟环境下的安装及部署

将Spark安装到指定目录 // 通过wget下载Spark安装包 $ wget https://d3kbcqa49mib13.cloudfront.net/spark-2.1.1-bin-hadoop2.7.tgz // 将spark解压到安装目录 $ tar –zxvf spark-2.1.1-bin-hadoop2.7.tgz –C /usr/local/ // 重命名 $ mv /usr/local/spark-2.1.1-bin-hado…

面试 Redis 八股文十问十答第三期

面试 Redis 八股文十问十答第三期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;redis 的 lua 脚本用过吗&…

前端怎么debugger排查线上问题

前端怎么debugger排查线上问题 1.问题背景2.问题详细说明3.处理方案a.开发环境怎么找&#xff0c;步骤一样的&#xff1a;b.生产环境怎么找&#xff0c;步骤一样的&#xff1a;还有一种情况就是你的子盒子是使用csshover父盒子出来的&#xff0c; 4.demo地址&#xff1a; 1.问题…

OOP 下一个排列(函数模板)

题目描述 输入一个序列&#xff0c;输出其下一个字典序的排列 如&#xff1a;输入1 2 3&#xff0c; 下一个为1 3 2&#xff0c; 下一个为2 1 3&#xff0c; 下一个为2 3 1&#xff0c; 下一个为3 1 2&#xff0c; 下一个为3 2 1&#xff08;最大的字典序排列&#xff0…

C++基础-编程练习题和答案(数组2)

文章目录 前言一、植树二、校门外的树三、排除第一个异形基因四、比身高五、supercell做核酸 前言 在C中&#xff0c;数组是一种数据结构&#xff0c;它允许在内存中连续存储相同类型的元素。数组是静态的&#xff0c;这意味着它们在编译时必须指定大小&#xff0c;并且在程序…

java版MES系统全套源码,支持 SaaS 多租户,管理后台的 Vue3 版本采用 :vue-element-plus-admin

MES生产制造执行系统源码&#xff0c;有演示&#xff0c;自主研发&#xff0c;多个项目应用案例&#xff0c;成熟稳定。支持二次开发&#xff0c;商业授权后可商用。 MES系统是面向制造企业车间执行层的生产信息化管理系统&#xff0c;能实时监控生产过程、管理制造数据、优化生…

惊呆了!六西格玛培训竟然这么强大!——张驰咨询

六西格玛&#xff0c;这个在业界久负盛名的管理理念&#xff0c;它的魅力太强大了。曾听闻它能帮助企业和个人提升竞争力&#xff0c;但当真正走进这个培训体系时&#xff0c;会发现它的影响力远超你的想象。 在六西格玛的指导下&#xff0c;企业实现了显著的转变。之前那些看…

vue使用html2canvas截图下载时,存在svg或者img或者特殊字体时截图不全的解决办法

使用html2canvas进行div截图时&#xff0c;存在svg和img的解决办法 写在前面&#xff1a;vue使用html2canvas截图时&#xff0c;存在svg或者img或者特殊字体时截图时空白&#xff0c;或者不全解决办法如下第一步&#xff0c;svg或者img先转base64&#xff08;如果是特殊字体&am…

优化家庭网络,路由器无线中继配置全攻略(中兴E1600无线中继设置/如何解决没有预埋有线网络接口的问题/使用闲置路由实现WIFI扩展)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 网络优化 📒📒 操作步骤 📒💡适用场景🚨 常见问题及解决方案⚓️ 相关链接 ⚓️📖 介绍 📖 在现代家庭生活中,WiFi已经渗透到我们生活的每一个角落,成为了日常生活中不可或缺的一部分。然而,不少用户常常遇到W…

区块链简要介绍及运用的技术

一、区块链的由来 区块链概念最早是从比特币衍生出来的。 比特币&#xff08;Bitcoin&#xff09;诞生于2008年&#xff0c;是由一个名叫中本聪&#xff08;Satoshi Nakamoto&#xff09;的人首次提出&#xff0c;这个人非常神秘&#xff0c;至今没有他的任何准确信息。在提出…

C++ Primer Chapter 4 Expressions

Chapter 4 Expressions 4.11 类型转换 4.11.2 其他隐式类型转换 数组转换成指针&#xff1a; 在大多数用到数组的表达式中&#xff0c;数组自动转换成指向数组首元素的指针&#xff1a; int ia[10]; int* ipa;♜ 当数组被用作decltype关键字的参数&#xff0c;或者作为取地…

每天一个数据分析题(三百五十三)序列类图表

比较类图表主要用于在实际值与目标值之间、不同对象之间或者不同区域之间进行数值结果的对比分析&#xff0c;下列属于比较类图表的是&#xff1f; A. 油量表 B. 词云图 C. 染色地图 D. 面积图 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处…

Windows下Qt5.14.2连接华为IoTDA平台

一、华为IoTDA简介 华为云物联网平台&#xff08;IoT 设备接入云服务&#xff09;提供海量设备的接入和管理能力&#xff0c;将物理设备联接到云&#xff0c;支撑设备数据采集上云和云端下发命令给设备进行远程控制&#xff0c;配合华为云其他产品&#xff0c;帮助您快速构筑物…

教师自费出书的注意事项有哪些?

备案主编专著的优势&#xff1a;&#xff08;qkfb88688&#xff09; 1、副高、正高职称最高学术成果 2、专著可以代替核心 3、周期短、出书快、可重复使用 4、双号齐全&#xff1a;ISBN&#xff5e;CIP 5、版权长期有效 教师自费出书有以下一些注意事项&#xff1a; 关于书稿&…

在CentOS 7上查看和管理内存使用情况

在Linux系统中&#xff0c;内存管理是一个至关重要的方面&#xff0c;尤其在生产环境中&#xff0c;了解系统内存的使用情况可以帮助管理员优化系统性能&#xff0c;检测内存泄漏&#xff0c;合理分配资源&#xff0c;从而确保系统的稳定运行。本文将详细介绍在CentOS 7系统中如…

每天一个数据分析题(三百五十一)-树状体系图

杜邦树状分析体系是将总指标根据指标关系拆解成各细分指标&#xff0c;从上到下依次排列形成树状结构。杜邦树状体系图的作用包括&#xff1f; A. 原因追踪 B. 进度管理 C. 预估影响 D. 鸟瞰全局 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此…

二、线性回归模型

目录 一、线性回归 1.模型示例 2.代码实验&#xff08;C1_W1_Lab03_Model_Representation&#xff09; (1).工具使用 (2).问题描述-房价预测 (3).输入数据 (4).绘制数据集坐标点 (5).建模构造函数 二、代价函数&#xff08;Cost function&#xff09; 1.解释一下概念…

mysql用户管理知识点

1、权限表 1.1、user表 1.1.1、用户列 Host、User、Password分别表示主机名、用户名、密码 1.1.2、权限列 决定了用户的权限&#xff0c;描述了在全局范围内允许对数据和数据库进行操作。 1.1.3、安全列 安全列有6个字段&#xff0c;其中两个是ssl相关的&#xff0c;2个是x509相…