Fork me on GitHub
摘要: 对比参考:剖析.o文件ELF组成 相比.o的ELF格式,有哪些变化? .rel.text和.rel.data消失了 为什么这两个节会消失? 链接器将各.o中同名的.text和.data节整合到一起时,会对整合后的.text和.data进行重定位。其实重定位时主要针对就是.text和.data节,不过 阅读全文
posted @ 2018-08-03 20:17 克拉默与矩阵 阅读(1278) 评论(0) 推荐(0) 编辑
摘要: 参考:剖析.o文件ELF组成 目标文件 .symtab中记录的符号是从.s文件来的,所以.s这个汇编文件很关键。 .symtab所记录符号的种类 示例代码 a.c extern int a_va1 = 100; static float a_va2 = 200.0; static void a_fu 阅读全文
posted @ 2018-08-03 16:43 克拉默与矩阵 阅读(2049) 评论(0) 推荐(0) 编辑
摘要: 目标文件种类 有三种 ①可重定位目标文件 被用于静态链接的文件,都是可重定位目标文件。根据这个概念,静态库文件(.a/.lib)和.o文件都是“可重定位目标文件”,因为它们都是静态链接的。 疑问:为什么称为“可重定位”? 因为静态连接时,逻辑地址需要被重定位为运行地址,所以就被称为可重定位目标文件。 阅读全文
posted @ 2018-08-03 11:47 克拉默与矩阵 阅读(547) 评论(0) 推荐(0) 编辑
摘要: ELF文件结构组成 ①总共13个节 ②每个节都有一个编号。从ELF头开始编号,编号从0开始,编号的作用就是用来索引(找到)不同节的。 ③每个.o的都是这样的结构。链接时要做的就是,将ELF格式的.o全部合成为一个完整的ELF格式可执行文件。 ④.o中每个节的逻辑地址都是从0开始的 ELF头 ELF格 阅读全文
posted @ 2018-08-03 11:46 克拉默与矩阵 阅读(1695) 评论(2) 推荐(1) 编辑
摘要: 如何得到库 ①先写好一堆的.c文件(.c:我们所需要的各种工具函数) ②将这些.c编译为对应的.o ③将所有的这些.o打包为一个仓库文件(静态库或者动态库) 静态库:按照静态库的方式打包 动态库:按照动态库的方式打包 因为打包的规则不同,所以得到库也是不同的 共性与个性 二者的共性 都是事先做好的. 阅读全文
posted @ 2018-08-03 10:19 克拉默与矩阵 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 什么是链接? 链接其实就是连接的意思,将所有相关的东西连接起来。 简单理解静态连接和动态链接: 静态链接:编译时完成链接 动态链接:程序运行起来后,根据需求再去链接,这就是动态链接 静态链接 什么是静态链接 所谓静态链接,其实就是在编译时,调用ld/collect2链接程序,将所有的.o中的机器指令 阅读全文
posted @ 2018-08-03 00:19 克拉默与矩阵 阅读(1050) 评论(0) 推荐(2) 编辑
摘要: 分析gcc -v的详细信息的意义 首先我们需要清楚一点,我们并不能完全弄清楚gcc -v的所有信息,因为毕竟我们并不是GCC编译器集合的实现者,对于这些信息,他们才是最清楚的。由于我们不能将所有的信息都搞清楚,所以我们只分析关键信息。虽然我们不能将所有信息都全部弄清楚,但是分析里面的关键信息还是非常 阅读全文
posted @ 2018-08-03 00:17 克拉默与矩阵 阅读(9720) 评论(0) 推荐(1) 编辑