C&C++编译链接过程

14 篇文章 0 订阅

本文讲解编译链接过程,因为才疏学浅可能有些不准确。

使用c文件的编译链接过程,使用Linux系统用来查看文件信息。

(1)从源文件main.c编译链接成main.exe,需要经历如下步骤:

 

 

(2)其中符号和符号表是什么呢?段又是什么?

段:在一个程序中,所有的代码最后都只后生成指令和数据。指令和数据分别存在不同的段中。

符号:所有的数据都会生成符号来标记它自己,指令中只会有函数名生成符号。

符号表:所有的符号都存储在符号表中

(3)可重定位目标文件

在Linux系统中目标文件由几个区组成,每个区前面都包含一个头部。区总数有限制。区内可以包含可执行文件,数据,动态链接信息,调试数据,符号表,重定位信息,注释,字符串表和备注等信息。其中,一些区等内容直接加载到进程镜像中,一些区为构建进程镜像过程中提供辅助信息,还有一些区只在链接对象文件过程中使用到。
下面几个区是所有可执行文件通用部分。

(4)链接过程

链接是将多个二进制可执行文件的符号表合并在一起,合并所有的段,并且调整段的偏移最后进行符号解析与符号重定位。

(5)可执行文件载入内存

文件中数据按照四字节对齐,在如下的虚拟地址空间内按页对齐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值