当前位置: 首页 > article >正文

窥探目标文件

文章目录

  • 源文件如何变成可执行文件
    • 编译
    • 链接
  • 目标文件格式
    • ELF文件格式
      • 节表
      • 重定位表(.rela)
      • 符号表(.symtab)
        • 符号(链接的接口)
          • 强符号与弱符号
          • 强引用与弱引用
        • 符号表表项
          • 符号类型和绑定信息
          • 符号所在段
      • 其他节

源文件如何变成可执行文件

CPU只能执行二进制指令,无法执行用户直接编写的源代码,因此在IDE中简单地一键运行背后一定隐藏了一套复杂的转换过程。这个过程分为2步,编译+链接

编译

编译负责将各个编译单元转换成目标文件

这里的编译是一个笼统的说法,编译具体可以划分为预处理+编译+汇编三个步骤,这个过程需要编译器和汇编器的介入,预处理后的.i文件仍然是一个源文件,编译后的.s为汇编文件,汇编后的.o是一个二进制文件(即目标文件),目标文件非常重要,它是参与后续链接的基本单元

链接

链接负责将各个目标文件合并成一个可执行文件

链接过程中会进行对全局变量,全局函数的地址修正(重定位),每一个需要被重定位的地方称为重定位入口,只有经过重定位后才正确地执行程序
在这里插入图片描述

目标文件格式

若想了解链接就必须了解目标文件,Linux下的目标文件遵循Executable Linkable Format(ELF)文件格式,除此之外,可执行文件、核心转储文件、共享对象文件也遵循ELF文件格式

在这里插入图片描述

ELF文件格式

ELF文件格式最大的特点就是按节(section)编排,粗略得看ELF文件自底向上分别是文件头、代码节(.text)、已初始化数据节(.data)、未初始化数据节(.bss),当然除此之外还有很多辅助节存在

/*test.c*/
int a;	//.bss
int b=1; //.data
int main(){
    //.text
	return 0;

http://www.kler.cn/a/526265.html

相关文章:

  • 详解python的修饰符
  • Redis --- 分布式锁的使用
  • 2025美赛数学建模MCM/ICM选题建议与分析,思路+模型+代码
  • Deepseek技术浅析(一)
  • 未来无线技术的发展方向
  • Kotlin开发(六):Kotlin 数据类,密封类与枚举类
  • Git进阶之旅:.gitignore 文件
  • PostgreSQL技术内幕24:定时任务调度插件pg_cron
  • 告别页面刷新!如何使用AJAX和FormData优化Web表单提交
  • 集合的奇妙世界:Python集合的经典、避坑与实战
  • 35【VS工具和c语言的关系】
  • INCOSE需求编写指南-附录 C: 需求模式
  • SystemVUE安装与入门
  • 论文阅读(十一):基因-表型关联贝叶斯网络模型的评分、搜索和评估
  • C++并发:设计基于锁的并发数据结构
  • Chrome浏览器编译系统研究与优化分析
  • 小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5
  • 【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口
  • 前端AI— Language User Interface(语言用户界面,简称LUI)
  • 26_DropDown使用方法
  • C++并发编程指南08
  • 4 Spark Streaming
  • Vue3.0教程004:ref和reactive对比
  • 霍尔电流传感器
  • 【漫话机器学习系列】070.汉明损失(Hamming Loss)
  • 《DeepSeek 实用集成:大模型能力接入各类软件》