标签:文件 调用 操作系统 ELF 笔记 南京大学 collect2 链接
ELF文件
ELF(Executable and Linkable Format, 可执行与可链接文件)是一种为可执行文件、目标文件、共享链接库和内存转储(core dump)准备的标准文件格式。
一个ELF文件由以下三个部分组成:
- ELF头:描述文件的主要特性:类型、CPU架构、入口地址,现有部分的大小和偏移等;
- 程序头表:列举了所有有效的段(segment)和它们的属性,程序头表需要加载器将文件中的节加载到虚拟内存段中;
- 节头表:包含对节(section)的描述。
程序在linux系统中的执行步骤
- 被操作系统加载
通过父进程的execve - 不断执行系统调用
在程序内部,对库函数的使用会去调用操作系统的系统调用
进程管理:fork、execve、exit等
文件/设备管理:open、close、read、write
存储管理:mmap、brk - 退出(exit)
——任何一个复杂的应用程序在操作系统中的执行都是按照上述步骤。
gcc的执行步骤
一个.c文件,经过预处理变成.i文件,编译变成.s文件,汇编变成.o文件,链接变成.out文件。
- cc1-编译器
- as-汇编器
- collect2-收集器(收集构造和析构函数的信息, 合成call_constructors和call_destructors来调用构造和析构函数)
- ld-链接
collect2是ld链接器的一个封装,gcc通过调用collect2调用ld来完成链接工作。collect2主要实现了两个额外的功能:生成代码调用全局静态对象的构造函数和析构函数;支持Cfront的方式生成模板代码。
标签:文件,调用,操作系统,ELF,笔记,南京大学,collect2,链接 来源: https://www.cnblogs.com/MiaoMiaoGarden/p/15578145.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。