
链接、装载与库
文章平均质量分 92
恋喵大鲤鱼
一条不止于编码的鱼。
展开
-
程序的装载方式
程序执行时所需要的指令和数据必须在内存中才能够运行。最简单的就是静态装入:将程序运行所需要的指令和数据全都装入内存中。当程序所需要内存大于物理内存时,无法满足静态装入的要求,这个时候就需要使用动态装入了,其思想是将程序运行时当前不用的模块放在磁盘,使用的模块放在内存。动态装入典型的两种方法:覆盖装入(Overlay)和页映射(Paging),都利用了程序的局部性原理,将程序最常用的部分驻留在内存...原创 2019-08-11 22:02:35 · 1124 阅读 · 0 评论 -
认识目标文件的格式—— a.out COFF PE ELF
目标文件是源代码编译后未进行链接的中间文件(Windows的 .obj 和 Linux 的 .o),与可执行文件(Windows 的 .exe 和 Linux 的 ELF)的结构和内容相似,因此跟可执行文件采用同一种格式存储。COFF 的主要贡献是在目标文件中引入了“段”的机制,不同的目标文件可以拥有不同数量及不同类型的段。目标文件与可执行文件的格式和操作系统和编译器密切相关,不同的系统平台下会有不同的格式,但是这些格式又大同小异,可以说,目标文件与可执行文件格式的历史几乎是操作系统的发展史。原创 2019-06-15 22:59:34 · 1797 阅读 · 0 评论 -
认识目标文件的结构
目标文件是源代码编译但未链接的中间文件,Windows 的 .obj 和 Linux 的 .o 文件。Windows 的目标文件采用 PE 格式,Linux 采用 ELF 格式,两种格式均是基于通用目标文件格式(COFF,Common Object File Format)变化而来,所以二者大致相同。本文以 Linux 的 ELF 格式的目标文件为例,进行介绍。原创 2019-06-21 21:22:10 · 1760 阅读 · 4 评论 -
认识目标文件的符号
符号是链接的粘合剂,没有符号无法完成链接。每一个目标文件都会有一个相应的符号表(Symbol Table),这个表里记录了目标文件中所用到的所有符号。1. 特殊符号当我们使用ld作为链接器来链接生产可执行文件时,它会为我们定义很多特殊的符号,这些符号并没有在你的程序中定义,但是你可以直接声明并且引用它,我们称之为特殊符号。其实这些符号是被定义在ld链接器的链接脚本中的,我们无须定义它们,但可以...原创 2019-06-23 20:39:01 · 1783 阅读 · 1 评论 -
使用 ld 命令链接目标文件生成可执行文件
使用ld链接目标文件生成可执行文件,用于取代命令g++,仅仅用于学习ld命令的使用,不用于实际的项目编译。首先看一个简单的C++源文件main.cpp。////@file:main.cpp//#include <iostream>using namespace std;int main(){ cout<&l原创 2019-03-03 21:55:12 · 7739 阅读 · 2 评论