重定位和链接脚本 (1)重定位:分为静态重定位和动态重定位 静态重定位:静态重定位是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始位置,直接修改装配模块中的有关使用地址的指令 我们下面要分析就是静态重定位的情况。 动态重定位:动态重定位是指,不是在程序执行之前而是在程序执行过程中进行地址 ...
分类:
其他好文 时间:
2016-08-01 22:29:05
阅读次数:
118
第一部分、章节目录2.5.1.start.S引入2.5.2.start.S解析12.5.3.start.S解析22.5.4.start.S解析32.5.5.start.S解析42.5.6.start.S解析52.5.7.start.S解析62.5.8.start.S解析72.5.9.uboot重定位详解2.5.10.start.S解析82.5.11.start.S解析92.5.12.start.S解析102.5.13.start.S解..
分类:
其他好文 时间:
2016-07-31 22:29:30
阅读次数:
214
问题:之前建了一个SVN代码库,同步了代码上去,但中途发现建库时的规则搞错了,就把服务器上的库给删了重建,然后改变本地代码的svn服务器关联地址,但使用Relocate一直报错。 错误有两种情况:1.提示新的地址不是同一个根目录;2.提示uuid不同。 在网上找了好多办法解决重定位问题依然不行,于是... ...
分类:
其他好文 时间:
2016-07-30 11:59:02
阅读次数:
240
嵌入式linux面试题解析(一)——ARM部分二1、描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别。基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中一般有重定位的操作;基于ROM:没有上面的操作。基于ROM:速度较基于RAM的慢,因为会有一..
分类:
系统相关 时间:
2016-07-30 06:57:56
阅读次数:
298
7.7 重定位 当完成了符号解析, 也就意味着代码中的每个符号引用和符号定义联系起来了, 那么对于那些在一个文件中定义而在另外一个文件中引用的符号, 我们就可以确切地知道其大小. 接下来是重定位 : 7.7.1 重定位条目 重定位条目有两种, 分别放在.rel.text和.rel.data中 : 1 ...
分类:
其他好文 时间:
2016-07-22 17:25:42
阅读次数:
138
在编译共享库必须加上-fpic。这是为什么呢? 首先看一个简单的例子: 先不加-fpic的情况下生成库,反汇编查看fun1的机器码 可以看出调用printf的位置是那个唯一的一个call,并不是跳转到plt表,有关plt表的内容可以查看我前面的博文。也就是说在该库被加载时需要修改代码段来达到重定位的 ...
分类:
系统相关 时间:
2016-07-21 14:36:58
阅读次数:
285
一:为什么需要进行重定位我们在设计一个程序时,会给这个程序指定一个运行地址(链接地址)。就是说我们在编译程序时其实心里是知道我们程序将来被运行时的地址(运行地址)的,而且必须给编译器链接器指定这个地址(链接地址)才行。最后得到的二进制程序理论上是和你指定的..
分类:
其他好文 时间:
2016-07-19 02:32:44
阅读次数:
171
符号重定位讲动态链接之前,得先说说符号重定位。c/c++程序的编译是以文件为单位进行的,因此每个c/cpp文件也叫作一个编译单元(translationunit),
源文件先是被编译成一个个目标文件,
再由链接器把这些目标文件组合成一个可执行文件或库,链接的过程,其核心工作是解决模块间各..
分类:
其他好文 时间:
2016-07-11 01:27:16
阅读次数:
107
GNU工具链学习笔记 GNU工具链学习笔记 1..so为动态链接库,.a为静态连接库。他们在Linux下按照ELF格式存储。ELF有四种文件类型。可重定位文件(Relocatable file,*.o,*.a),包含代码和数据,可用来连接成可执行文件或共享目标文件;可执行文件(Executable ...
分类:
其他好文 时间:
2016-07-04 06:31:45
阅读次数:
135
一.链接器的主要任务: 1.符号解析:把代码中的每个符号引用和确定的一个符号定义联系起来 (E//可重定位目标文件集合,U//未解析符号集合,D//在前面输入文件已定义的符号集合) 2.重定位: 2.1 重定位节和符号定义 合并相同的节 任何为输入模块定义的每个节以及每个符号,赋唯一的运行时存储器地 ...
分类:
其他好文 时间:
2016-07-02 11:50:51
阅读次数:
171