程序是如何链接和运行的

本文详细介绍了程序的链接过程,包括静态链接和动态链接。静态链接将目标文件合并成可执行文件,动态链接则在运行时完成。文章还讨论了程序如何运行,涉及加载器、ELF文件格式、地址无关代码等概念。
摘要由CSDN通过智能技术生成

一、什么是链接?

C/C++程序的编译可以分解为4个步骤,预处理、编译、汇编、链接。每个源文件先进行预处理,完成预编译操作,再通过编译进行一系列语法、语义分析生成汇编代码文件,之后汇编器将汇编代码转变成机器可以执行的指令,即机器语言。预处理、编译、汇编都是对独立的源文件模块进行处理,而链接的作用就是将这些独立的模块组装起来。链接过程主要包括了地址和空间分配符号解析重定位等。
在这里插入图片描述


二、目标文件格式

目标文件指源代码经过编译产生的能被cpu直接识别二进制代码,了解它对于认识系统背后的机理有巨大的好处。Windows的PE、Linux的ELF都是COFF格式的变种,下面着重了解一下ELF格式。ELF文件可分为可重定位文件(静态链接库也可归为这一类)、可执行文件、共享目标文件、核心转储文件。

典型的ELF可重定位目标文件:
在这里插入图片描述
ELF头以一个16字节的序列开始,这个序列描述了字的大小和生成该文件系统的字节顺序。ELF头还包括ELF头的大小、目标文件的类型、机器类型、节头部表的文件偏移,以及节头部表中表目大小和数量。不同节的位置和大小是由节头部表描述的。
一个典型的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值