欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 窥探目标文件

窥探目标文件

2025/2/3 7:49:50 来源:https://blog.csdn.net/2301_78863061/article/details/143577021  浏览:    关键词:窥探目标文件

文章目录

  • 源文件如何变成可执行文件
    • 编译
    • 链接
  • 目标文件格式
    • 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(){ //.textreturn 0;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com