C&C++编译链接过程

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

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

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

 

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

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

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

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

(3)可重定位目标文件

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

扫描二维码关注公众号,回复: 4843785 查看本文章

(4)链接过程

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

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

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

猜你喜欢

转载自blog.csdn.net/HDong99/article/details/86037627