ELF文件信息一览

准备开个专栏,记录《从零开始实现链接器》的学习过程,先占个坑。

之前一直想把自己的学习过程记录在个人博客网站上,但这个要自己维护,上传图片什么的比较麻烦。关键是没有人互动,自己也没有怎么去看,慢慢的就遗忘了。在CSDN上有人点赞的时候我会看一下对应的博客,还能复习一下,索性后面的内容全部记录在CSDN上了。
学的过程中有一些零零散散的东西要记录,但可能没时间整理,索性先记一些关键词在这里,有空的时候在扩充和整理。所以我的博客可能经常不完整,像一个草稿,随记随保存。


参考链接:
静态链接和加载;最小动态加载器[南京大学(蒋炎岩)]
深入理解计算机系统——链接
从零开始实现链接器——第二课
https://en.wikipedia.org/wiki/GNU_Binutils

了解elf文件中的调试信息

有时候编译好程序调试的时候,虽然设置了断点,但程序并没有在断点的位置停下来。这可能是由于编译时没有创建调试信息。当使用g++编译程序时,通过-g参数可生成调试信息:

$ g++ -g elfinfo.cpp -o elfinfo
$ file elfinfo
elfinfo: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c814baea7a3040d5463c6a203dfb82c8a7f235b1, for GNU/Linux 3.2.0, with debug_info, not stripped
$ readelf -S elfinfo | grep debug[29] .debug_aranges    PROGBITS         0000000000000000  00007043[30] .debug_info       PROGBITS         0000000000000000  000075d3[31] .debug_abbrev     PROGBITS         0000000000000000  00010cf5[32] .debug_line       PROGBITS         0000000000000000  000118bb[33] .debug_str        PROGBITS         0000000000000000  00012a7f[34] .debug_line_str   PROGBITS         0000000000000000  0001cb79[35] .debug_rnglists   PROGBITS         0000000000000000  0001cfa1

上面的命令先带-g去编译程序,通过file命令看到最后的信息为with debug_info, not stripped,说明时存在调试信息的,这类文件可以被调试。如果用readelf -S elfinfo查看Section Header Table里的信息,会发现存在一些debug段,调试器通过这些段来完成调试。如果不带-g进行编译,则没有这些段,因此不能调试。

有时候为了进一步缩小文件尺寸,还会使用strip命令删除文件中不重要的段,在strip后,通过file命令输出的信息中会显示stripped。当对比strip文件和未被strip的文件时,会发现strip后的文件少了两个段.symtab和.strtab。同时nm命令的输出结果为空,如下:

$ g++ elfinfo.cpp  -o elfinfo
$ nm -a ./elfinfo | wc186     507   11412
$ strip elfinfo
$ nm -a ./elfinfo | wc
nm: ./elfinfo: no symbols0       0       0

根据GPT的解释,nm的工作原理如下:

我:nm命令依赖于elf中的某些段吗?
GPT:是的,nm命令实际上依赖于ELF(Executable and Linkable Format)文件格式中的一些特殊段来获取信息。下面就是几个关键的部分:

  1. 符号表(Symbol Table): 符号表是存储程序中所有符号的信息的地方。这些信息包括符号的名称、类型、定义的位置等。nm命令主要从这个位置提取信息。
  2. 字符串表(String Table):这个部分用来储存符号表里符号的名称字符串。当我们使用nm命令时,它会读取这个部分来找到符号的名称。
  3. 符号表和字符串表的位置信息都存储在程序头表(Program Header Table)或者节区头部表(Section Header Table)中,nm命令会首先访问这些表,然后间接找到符号表和字符串表。

总的来说,nm命令不仅仅依赖于一个单独的段,而是从以上这些段中获取多个方面的信息来解析出符号的全貌。

RUST LD_PRELOAD

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

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

相关文章

柯桥专业会计学校之相关财税知识,2023年新版增值税税率表

一、增值税税率 一般纳税人增值税税率:13%,9%,6%,0%,都适用于哪些项目?我们具体来看:(目前小规模纳税人3%征收率减按1%执行) 二、扣除率 扣除率是指增值税计征中法定扣除…

什么是DDOS 攻击?常见的DDOS攻击有哪些?

什么是DDoS攻击? DDoS攻击(分布式拒绝服务攻击)是一种旨在使计算机或网络资源不可用的恶意尝试。它通过使用多个受感染计算机(称为僵尸网络)同时向目标发送大量流量来实现这一目的,从而使目标不堪重负并崩溃…

【Bootstrap学习 day7】

Bootstrap按钮 按钮样式 使用.btn相关类实现 <button type"button" class"btn">基本按钮</button> <button type"button" class"btn btn-primary">主要按钮</button> <button type"button" cl…

【数据结构-单链表】(C语言版本)

今天分享的是数据结构有关单链表的操作和实践&#xff08;图解法&#xff0c;图变化更利于理解&#xff09; 记录宗旨&#x1f4dd;&#xff1a; 眼&#xff08;脑&#xff09;过千遍&#xff0c;不如手过一遍。 我们都知道单链表是一种常见的链表数据结构&#xff0c;由一系列…

【大数据】修复 Linux 错误 - 内存不足

修复 Linux 错误 - 内存不足 在使用 Linux 操作系统时,您可能会遇到内存不足的错误。这种错误通常会导致系统运行缓慢或崩溃。本文将介绍如何识别和修复 Linux 中的内存不足问题。 1. 检查内存使用情况 首先,您需要检查系统的内存使用情况。可以使用以下命令来查看当前内存…

【Java进阶篇】String中 intern 的原理是什么?

String中 intern 的原理 ✔️ 典型解析✔️小思考&#xff08;回顾&#xff09; ✔️字面量✔️intern✔️ intern原理✔️a和1有什么不同✔️答案 ✔️ 典型解析 字符串常量池中的常量有两种来源&#xff1a; 1、 字面量会在编译期先进入到Class常量池&#xff0c;然后再在运行…

配置ssh免密登录

1、cd ~ cd .ssh 输入ssh-keygen -t rsa 敲三次回车 [rootcdh-hadoop3 .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase…

milvus学习(一)cosin距离和欧式距离

参考&#xff1a;https://blog.csdn.net/qq_36560894/article/details/115408613 归一化以后的cosin距离和欧式距离可以相互转化&#xff0c;未归一化的不可以相互转化&#xff08;因为距离带单位&#xff09;。

C++多态性——(2)联编

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 成功的秘诀就在于多努力一次&#xff…

自动化测试中,如何增加失败重试机制!

01、前言 在执行自动化测试用例时&#xff0c;会发现有时候用例失败并非代码问题&#xff0c;而是由于服务正在发版&#xff0c;导致请求失败&#xff0c;从而降低了自动化用例的稳定性&#xff0c;最后还要花时间定位到底是自身case的原因还是业务逻辑问题&#xff0c;还是其…

电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

​随着市场竞争的加剧和企业规模的扩大&#xff0c;招采管理逐渐成为企业核心竞争力的重要组成部分。为了提高招采工作的效率和质量&#xff0c;我们提出了一种基于电子化平台的解决方案。该方案旨在通过电子化招投标&#xff0c;使得招标采购的质量更高、速度更快&#xff0c;…

宣传照(私密)勿转发

精美的海报通常都是由UI进行精心设计的&#xff0c;现在有100 件商品需要进行宣传推广&#xff0c;如果每个商品都出一张图显然是不合理的&#xff0c;且商品信息各异。因此需要通过代码的形式生成海报。对此&#xff0c;我也对我宣传一波&#xff0c;企图实现我一夜暴富的伟大…

贪心算法part04 860柠檬水找零 406根据身高重建队列

860 柠檬水找零 406 根据身高重建队列 452 用最少数量的箭引爆气球

使用java备份和恢复SQLServer表数据

需求 近来工作中遇到一个问题&#xff0c;内网办公系统中的数据需要导出到外网中进行查询&#xff0c;外网的数据库中还有一些表存储外网的数据&#xff0c;因此无法使用全库备份恢复功能来满足需求。即只从内网数据库中导出若干表的内容至外网数据库的对应表。 其他解决方案…

构建Python的Windows整合包教程

构建Python的Windows整合包教程 原文链接&#xff1a;https://blog.gcc.ac.cn/post/2023/buildpythonwindowsintegrationpackagetutorial/ 构建Python的Windows整合包教程 - 我的博客原文链接 前言 之前的开源项目本地素材搜索有很多人想要Windows整合包&#xff0c;因为Wi…

六、HTML 段落

HTML 可以将文档分割为若干段落。 一、HTML 段落 段落是通过 <p> 标签定义的。 <p>这是一个段落 </p> <p>这是另一个段落</p> 注意&#xff1a;浏览器会自动地在段落的前后添加空行。&#xff08;</p> 是块级元素&#xff09; 二、不…

[蓝桥杯知识学习] 树链

DFS序 什么是DFS序 怎么求DFS序 进入操作&#xff0c;将有计数 出&#xff1a;可以理解为&#xff0c;没有孩子可以去了&#xff08;不能&#xff0c;向下行动&#xff1a;对应于程序里的入栈&#xff09;&#xff0c;所以回到父结点&#xff08;向上行动&#xff0c;对应于程…

SCENIC+:增强子和基因调控网络的单细胞多组学推理

SCENIC&#xff1a;增强子和基因调控网络的单细胞多组学推理 摘要IntroductionSCENIC 使用超过 30,000 个 TF 基序来预测 eGRNSCENIC 在 PBMC 多组数据上的图示SCENIC prioritizes functional enhancers &#xff08;SCENIC 优先考虑功能增强剂&#xff09;SCENIC simulates ph…

从0到1实战,快速搭建SpringBoot工程

目录 一、前言 二、准备工作 2.1 安装JDK 2.2 安装Maven 2.3 下载IDEA 三、从0到1搭建 3.1 创建SpringBoot工程 3.2 运行SpringBoot工程 四、总结 一、前言 SpringBoot是一个在Spring框架基础上构建的开源框架&#xff0c;不仅继承了Spring框架原有的优秀特性&#x…

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题&#xff0c;也是我很讨厌回答的问题&#xff0c;因为要想回答这个问题需要知道上下文。什么样式的元素&#xff0c;有哪些属性&#xff0c;是否有表单嵌套&#xff0c;都尝试了哪些定位方法。。。而且没几个提问者能事先详细的说明这些。哪儿像提bu…