重定位PC相对引用(PC-relative reference relocation)
示例代码(main.c, swap.c )见之前的一篇文章,分析目标文件。
可以看到main中调用swap的call指令位于section offset 0x1d处,操作码是e8,操作数是32bit的引用0xfffffffc,即-4(little endian存储的),下一行显示的是swa...
分类:
其他好文 时间:
2015-04-14 11:13:29
阅读次数:
257
三篇介绍动态链接库和静态链接库的博文:http://blog.csdn.net/gamecreating/article/details/5504152http://blog.csdn.net/firefoxbug/article/details/7326465http://www.cnblogs....
分类:
其他好文 时间:
2015-04-13 22:27:33
阅读次数:
123
1、重定位 汇编器产生的目标程序至少包含三个区,即文本区,数据区和bss区。文本区一般包括程序的代码和常量,数据区通常存放全局变量等内容,bss区用于存放未初始化的变量或作为公共变量存储空间。在一个目标文件中,其text区从地址0开始,随后是data区,再后面是bss区。而要运行程序,必须装载到内....
分类:
其他好文 时间:
2015-04-13 16:12:08
阅读次数:
126
用一个shell例子说明=~符号的使用:先定义一个数组PLATSS=('center' 'trad')if [[ "${PLATSS[@]}" =~ ${PLAT} ]];then # do somethingelse do something fi解析: '=~' 格式表示左边输出数组...
分类:
其他好文 时间:
2015-04-11 19:19:43
阅读次数:
113
动态库和静态库的区别 a.静态链接库,在编译以后包含在可执行文件中,不会以单独文件的形式存在 -- 初步判断 错 b.动态链接库是以单独文件存在,被程序外部调用(什么意思?) -- 初步判断 对 c.动态链接库的好处是可以多个进程访问一个动态链接库 -- 初步判断 对 d.动态链接库共享一块内存,静...
分类:
其他好文 时间:
2015-04-07 23:04:41
阅读次数:
120
符号和符号表在ld等链接器的上下文中,有三种不同的符号。每一个可重定位目标模块m都有一个符号表,它包含m所定义的和引用的符号的信息。由m所定义的并且能够被其他模块所引用的全局符号。就是非静态的c函数和被定义为不带c static属性的全局变量。在其他模块定义并被模块m引用的全局符号。......
分类:
其他好文 时间:
2015-04-07 11:56:07
阅读次数:
144
由于静态链接会造成内存和磁盘空间的浪费,同时程序的更新存在问题。所以提出了动态链接的概念。具体来讲就是在程序真正运行的时候才进行链接操作,这个在一定成都上可能带来性能问题,不过这样增加了相同代码的共享,增加了内存的利用率。
动态链接的步骤:
1) 加载可执行文件(存在外部符号引用),过程与静态链接一样
2) 加载动态链接库ld.so
3) 操作系统将控制权交给动态链接器的入口地址
4...
分类:
其他好文 时间:
2015-04-06 11:34:57
阅读次数:
170
ELF文件格式
这一节文章的标题叫做,在这里就不得不说ELF文件的格式. 因为像.o , .so, .exe 为后缀名的文件都是elf格式的文件. ELF 文件格式是一种二进制的文件.它被叫做可执行链接的格式(Executable and Linking Format).
ELF格式文件标准被选作为一种可移植的目标文件被分为三种类型:
可重定位文件(Relocatable F...
分类:
其他好文 时间:
2015-04-03 23:58:42
阅读次数:
603
本博客讲述了gcc实现静态链接的过程,和其中几个重要的概念。...
分类:
其他好文 时间:
2015-04-02 09:15:16
阅读次数:
174
从.c文件到 可执行 文件需要经历的过程static linking静态链接器的输入是一组可重定向文件,输出一个全链接的可执行目标文件。
目标文件有三种形式:
1. 可重定向目标文件:包含二进制代码和数据,可以在编译时和其他可重定向目标文件一起,得到可执行文件。
2. 可执行目标文件:包含二进制代码和数据,可以直接拷贝进内存进行执行。
3. 共享目标文件:一种特殊的重定向文件,可以被加载进内...
分类:
其他好文 时间:
2015-04-02 09:10:08
阅读次数:
172