
编译原理
文章平均质量分 77
默默进步---一鸣惊人
勤思考多动手
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
5:可执行目标文件概述
目录 一:ELF文件结构 二:程序头表 一:ELF文件结构 可执行目标文件的结构和重定位文件有些差异,主要表现在如下几个地方。 ELF头中字段e_entry给出执行程序时第一条指令的地址,而在可重定位文件中,此字段为0 多一个程序头表,也称段头表(segment header table),是一个结构数组 多一个.init节,用于定义_init函数,该函数用来进行可执行目标文件开始执行时的初始化工作 少两个.rel节(无需重定位) 下面这张图片就是可执行目标文件的结构 上面的图中.原创 2021-02-28 14:50:27 · 1114 阅读 · 0 评论 -
04可重定位目标文件ELF文件解析
目录 一:可重定位目标文件的特点 二:可重定位目标文件的格式 一:可重定位目标文件的特点 •可被链接(合并)生成可执行文件或共享目标文件 •静态链接库文件由若干个可重定位目标文件组成 •包含代码、数据(已初始化全局变量和局部静态变量.data和未初始化的全局变量和局部静态变量.bss) •包含重定位信息(指出哪些符号引用处需要重定位) •文件扩展名为.o(相当于Windows中的.obj文件) 我们都知道可重定位目标文件都是用来进行链接生成可执行目标文件的,那么下面我们来看下相应的链接试图原创 2021-01-17 17:36:32 · 1252 阅读 · 0 评论 -
3:目标文件格式概述
一:目标文件分类 目标文件大致可以分为以下3类: •可重定位目标文件 (.o) – 其代码和数据可和其他可重定位文件合并为可执行文件 • 每个.o 文件由对应的.c文件生成 • 每个.o文件代码和数据地址都从0开始 • 可执行目标文件 (默认为a.out) – 包含的代码和数据可以被直接复制到内存并被执行 – 代码和数据地址为虚拟地址空间中的地址 • 共享的目标文件 (.so) – 特殊的可重定位目标文件,能在装入或运行时被装入到内存并自动被链接,称为共享库文件 – Windows原创 2021-01-17 12:54:03 · 1071 阅读 · 0 评论 -
02链接过程分析
一:使用链接带来的好处 1:模块化 一个程序可以分成很多源程序文件 可构建公共函数库,如数学库,标准C库等 2:效率高(代码重用,开发效率高) 时间上,可分开编译只需重新编译被修改的源程序文件,然后重新链接 空间上,无需包含共享库所有代码源文件中无需包含共享库函数的源码,只要直接调用即可(如,只要直接调用printf()函数,无需包含其源码)可执行文件和运行时的内存中只需包含所调用函数的代码而不需要包含整个共享库 二:链接的本质 话不多说先上图,我们先从一个简单的例子开始分析,大家都知道原创 2021-01-10 16:27:27 · 358 阅读 · 0 评论 -
01程序编译过程分析,预处理,编译,汇编,链接
目录 前言 一:hello word由浅入深 二:预处理 三:编译 四:汇编 五:链接 总结: 前言 -------------------------------------------------------------------------------- 我们大多数开发人员在编写完程序之后都会通过相应的IDE执行编译的操作,将所编写的源代码转换成计算机可以识别并执行的文件。这个从源代码转换成可执行文件的过程有相应的IDE帮助我们完成,很多朋友对于这个过程都不太熟悉,今天我们就一起原创 2020-12-13 16:17:18 · 537 阅读 · 1 评论 -
gcc生成静态库和动态库
目录 前言 1:编辑源代码 2:编译.O文件 3:创建库文件 4:使用静态库 5:创建动态库 6:使用动态库 前言 我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。 1:编辑源代码 第1步:.原创 2020-11-22 10:03:52 · 299 阅读 · 0 评论 -
程序编译过程的解析
原文地址:https://blog.youkuaiyun.com/p23onzq/article/details/81977367 大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类,一种是编译型语言,例如C,C++,Java,另一种是解释型语言,例如Pyth...转载 2018-11-17 11:26:50 · 311 阅读 · 0 评论 -
hello word的一生
这个Hello World程序,看似简单,可是为了让它完成运行,需要系统的各个组成部分协调工作,本文将通过跟踪Hello World短暂的一生,来揭秘程序运行的奥义。 首先,为了将Hello.c变成可执行的二进制目标文件,需要将其推入加工车间—编译系统中进行加工,加工过程如图1.1所示。 ...原创 2018-11-18 15:46:09 · 363 阅读 · 0 评论