ELF

article/2025/10/5 22:32:43

目录

一,目标文件格式

二,ELF

1,分段

2,工具

3,查看目标文件内容


 

一,目标文件格式

编译链接 https://blog.csdn.net/nameofcsdn/article/details/116654835

目标文件和可执行文件的逻辑结构是类似的,所以一般采用同样的存储结构。

Windows中是PE(portable executable),Linux中是ELF(executable linkable format),这些都是COFF格式的变种,所以PE也称为PE-COFF

还有动态链接库、静态链接库也是采用可执行文件的格式进行存储的,准确的说,静态链接库是一些目标文件的打包。

unix的可执行文件是a.out格式,设计很简单,后来共享库出现之后,a.out搞不定,于是COFF出现了,COFF的主要贡献是段的概念。

ELF中,文件可分为四类:可重定位文件.o,可执行文件,共享目标文件(链接库),核心转储文件(core dump)

 

二,ELF

1,分段

目标文件按照段(segment)来存储,也叫节(section),2个概念差别不大。

目标文件中最重要的几个部分:

  • 文件头:文件属性(可执行,静态链接,动态链接等)、入口地址(如果是可执行文件)、目标硬件、目标操作系统、段表(各个段的偏移地址)等
  • 代码段:机器指令,.code or .text
  • 数据段:已初始化的全局变量和局部静态变量,.data
  • bss段:未初始化的全局变量和局部静态变量,.bss(block started by symbol)
  • 各种表:其中最重要的就是符号表

bss段只在段表中记录大小,在符号表中记录符号,并没有实际存储,所以不占文件空间,

目标文件被加载的时候,给bss段根据记录的大小分配内存

PS:全局变量无论是静态的还是非静态的,放在哪个段只取决于是否初始化为非0数据,局部变量如果是静态的,也是根据是否初始化为非0数据来区分,

那么,非静态的局部变量,为什么目标文件中没有它呢?(可以查看符号表,确实没有)

因为,在一个函数结束编译的时候,非静态的局部变量都会从符号表中删掉,只留下栈指针等相关内容

(如,先把栈指针移到某个位置,然后写入一个外部输入的变量,然后把它的平方值送到别的地方,编译之后只剩下这些指令,局部变量本身就没了)

2,工具

windows中的binutils、linux中的binutils、readelf都可以用来查看elf的内容,

binutils中包含objdump工具,安装MinGW也可以使用C:\mingw64\bin目录中的objdump.exe、readelf.exe等工具

3,查看目标文件内容

代码一:

// tmp.cpp#include<iostream>
using namespace std;int main()
{static int abcdefg[100]={1};cout<<abcdefg[0];return 0;
}

gcc -c .\tmp.cpp   其中-c表示只编译不链接

objdump -h .\tmp.o  其中-h表示查看段表

objdump -t .\tmp.o   其中-t表示查看符号表

代码二:

// tmp.cpp#include<iostream>
using namespace std;int main()
{static int abcdefg[100]={0};cout<<abcdefg[0];return 0;
}

只把数组初始值改成了0

gcc -c .\tmp.cpp 

objdump -h .\tmp.o 

可以看出,数组初始化为1的话,存在data段中,初始化为0的话,存在bss段中。

 


http://chatgpt.dhexx.cn/article/mpuvTiFH.shtml

相关文章

littlefs

1、littlefs主要用在微控制器和flash上&#xff0c;是一种嵌入式文件系统。主要有3个特点&#xff1a; 1)、掉电恢复 在写入时即使复位或者掉电也可以恢复到上一个正确的状态。 2)、擦写均衡 有效延长flash的使用寿命 3)、有限的RAM/ROM 节省ROM和RAM空间 2、已有的文件系…

luffy-(13)

内容概览 支付宝支付介绍支付宝支付二次封装订单相关表设计生成订单接口支付前端支付宝回调接口 支付宝支付介绍 """ 项目中有需要在线支付功能,可以使用支付宝支付(沙箱环境)微信支付(需要有备案过的域名)云闪付我们的项目以支付宝支付为例支付流程使用官方…

【FLFL】

论文记录 1. 3.3《基于区块链的联邦学习技术综述》2. 3.4《Swarm Learning for decentralized and confidential clinical machine learning》3. 3.8《Blockchained On-Device Federated Learning》4. 3.11《FLchain: Federated Learning via MEC-enabled Blockchain Network》…

LYF95101A 是一款高性能、高集成度、具有快速

LYF95101A 概述 LYF95101A是一款高性能、高集成度、具有快速 关断特性的单通道同步整流控制器。支持CCM, QR和 DCM的多模式工作。通过智能的控制MOSFET的开通 和关断&#xff0c;可替代反激变换器次级整流的肖特基二极管 来实现效率的提高。 LYF95101A 内置自供电电路&#xff…

渗透测试简介

病毒&#xff1a;是在计算机程序中插入的破坏计算机功能或者数据的代码&#xff0c;能影响计算机使用&#xff0c;能自我复制的一组计算机指令或者程序代码&#xff1b; ●木马&#xff1a;是比较流行的病毒文件&#xff0c;与一般的病毒不同&#xff0c;它不会自我繁殖&#x…

介绍模糊测试(Fuzz Testing,Fuzzing)

介绍模糊测试&#xff08;Fuzz Testing&#xff0c;Fuzzing&#xff09; 一、什么是模糊测试&#xff1f; 模糊测试是一种自动或半自动的测试技术&#xff0c;常被用来发现软件/操作系统/网络的代码中的错误和安全性问题&#xff0c;其中用于输入随机的数据和不合法的数据被称…

#学习笔记4#软件测试基础——测试阶段划分、黑盒测试的一些知识

今天主要看了以下几个方面的知识点&#xff0c;基本都是纯理论&#xff0c;本文只做知识点总结&#xff0c;具体内容要看转载 1.软件测试阶段划分&#xff0c;分为4个阶段&#xff1a;单元测试、集成测试、系统测试、验收测试 单元测试是方法类的覆盖&#xff0c;主要是由开…

辅助程序实现黑盒自动化测试的常见问题

背景 辅助程序&#xff08;Accessibility&#xff09;在大多数机型上具有重启设备后被激活的特性&#xff0c;可以完成Android测试框架&#xff08;Uiautomator1.0、Uiautomator2.0&#xff09;无法实现的功能。本文介绍如何搭建辅助程序和如何利用辅助程序进行黑盒测试。并总…

Android 13 Camera ITS 环境搭建(从Python安装到环境配置详解)

Python 版本 根据CameraITS.pdf 以及报错信息提示需要python版本在3.7.9及以上&#xff0c;本次使用的是3.8.10。 Python 安装 1.官方网站下载Python源码 wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz 2.进入到下载路径&#xff0c;解压Python文件 …

黑盒测试常见错误类型说明及解决方法有哪些?

目录 1、用户界面错误 2、遗漏信息 3、错误的、误导的或令人迷惑的信息 1、用户界面错误 功能性 易用性&#xff08;用户学习使用程序的时间和记住怎样使用程序的时间&#xff09; 执行速度&#xff08;多数是启动速度&#xff0c;查询速度&#xff0c;刷新速度及响应速度…

浅析黑盒测试与白盒测试

这里写自定义目录标题 黑盒测试黑盒测试常见的测试&#xff1a;黑盒测试常用的方法&#xff1a;等价类划分&#xff1a;边界值分析&#xff1a;因果图分析法、错误推断法&#xff1a; 白盒测试白盒测试常见的方法&#xff1a; 黑盒测试与白盒测试的优缺点二者的优点二者的缺点 …

卸载symantec杀毒软件

(Get-WmiObject -Class Win32_Product -Filter “Name‘Symantec Endpoint Protection’” -ComputerName . ).Uninstall()

schrodinger 薛定谔安装与卸载

schrodinger 薛定谔安装 Windows 版 百度云 链接&#xff1a;https://pan.baidu.com/s/107a4KMHMvg1vrXTFHnGcWw 提取码&#xff1a;c6t4 安装步骤 download所有压缩包&#xff0c;解压任意一个压缩包即可&#xff08;压缩包之间是相互关联的&#xff09;。 进入解压的后的文…

从rookie到基佬~009:无密码卸载Symantec

今天是变直小技巧 今日份洗脑&#xff1a;无密码情况下卸载Symantec&#xff08;赛门铁克&#xff09; 结论&#xff1a;赛门铁克的服务一旦启动&#xff0c;怎么卸载都需要密码&#xff0c;反过来说&#xff0c;你不让他启动&#xff0c;他就是待宰的羔羊。 坐标国内某企业…

赛门铁克下载

Symantec&#xff08;赛门铁克&#xff09;杀毒软件&#xff0c;包括Symantec AntiVirus即SAV系列&#xff0c;Symantec Client Security即SCS系列&#xff0c;以及Symantec Endpoint Protection即SEP系列&#xff0c;都是专门为企业级用户定制的。这3套Symantec杀毒软件均包括…

Symantex Endpoint Protection赛门铁克杀毒软件安装

一、交付邮件 目前软件交付基本都是通过邮件进行。杀毒软件交付邮件中附件包含序列号以及购买产品信息。 二、官网软件下载 在右键中点击“Download Today”跳转下载页面&#xff08;吐槽&#xff1a;交互很差劲&#xff09; 登录网站&#xff1a;https://support.broadcom.…

如何卸载赛门铁克(Symantec)企业防病毒客户端软件SEP(Symantec Endpoint Protection)?

本文分三个部分介绍如何卸载赛门铁克&#xff08;Symantec&#xff09;企业防病毒客户端软件SEP的Windows版本&#xff0c;Linux版本和MacOS版本。 1 卸载SEP for Windows 版本 SEP for Windows版本卸载使用传统办法 -- 通过Windows控制面板卸载是比较容易出问题的&#xff0…

赛门铁克管理密码忘记卸载工具

链接: https://pan.baidu.com/s/1zoolODBkK_ytHh4gPvHFxw?pwd2eea 提取码: 2eea 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 卸载工具已附上 1、安装步骤简单&#xff0c;不多解释。 工具安装到此步骤就可以看到卸载的进度。

MAC卸载赛门铁克

使用 RemoveSymantecMacFiles 卸载适用于 Mac 操作系统的赛门铁克软件 TECH103489 Last Updated August 17, 2018 Situation 您需要卸载安装在 Mac OS X 中适用于 Macintosh 的赛门铁克产品。您已尝试过多种方法&#xff08;包括手动卸载或运行 Symantec Uninstaller&#x…

赛门铁克symantec的安装与卸载-附下载地址(本人亲测)

赛门铁克symantec的安装与卸载 下载地址 1:英文版下载地址 https://www.jb51.net/softs/398259.html 2:中文版下载地址(包含卸载工具) 链接&#xff1a;https://pan.baidu.com/s/1Naes0tUtnJRwAhI5GZ_eYw 提取码&#xff1a;7r2h 一:安装 二:赛门铁克的卸载 1:window卸载…