《深入理解计算机系统》第7章 链接 本章主要内容: 链接——静态链接、动态链接(链接又包括两个主要任务:符号解析和重定位) 符号——全局符号和本地符号、符号表、符号解析 链接文件的创建及引用——gcc、ar rcs、sharedj及fPIC命令参数 重定位——重定位条目、重定位符号引用(PC相对引用 ...
分类:
其他好文 时间:
2016-04-06 21:36:30
阅读次数:
197
可执行程序的装载 一,预处理、编译、链接和目标文件的格式 可执行程序是怎么来的? 预处理 把include里的宏定义替换 做字符串处理。 efl格式? 目标文件格式,Windows中用PE Linux中用efl。 静态链接、动态链接? ABI和文件格式的关系? 二进制兼容。 可重定位文件 可执行文件 ...
分类:
系统相关 时间:
2016-04-06 11:01:06
阅读次数:
212
Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。 Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执 ...
分类:
其他好文 时间:
2016-04-04 19:39:57
阅读次数:
140
《深入理解计算机系统》第七章读书笔记 第七章:连接 一、连接 PS:X86-64系统上用gcc -m32产生32位代码 7.1编译器驱动程序 7.2静态链接 ld静态链接器: 7.3目标文件 7.4可重定位目标文件 7.5符号和符号表 1.任何声明带有static属性的全局变量或者函数都是模块私有的 ...
分类:
其他好文 时间:
2016-04-04 19:38:12
阅读次数:
184
共享库载入时重定位
原作者:Eli Bendersky
http://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries
本文的目的是解释现代操作系统如何使得共享库载入时重定位成为可能。它关注运行在32位x86的LinuxOS,但通用的原则也适用于其他OS与CPU。
共享库有许多名字——共享库,...
分类:
其他好文 时间:
2016-04-01 18:14:17
阅读次数:
274
程序在内存中加载好后 代码段和数据段的段地址在内存中的位置发生了变化 这个变化是随机的 因为内存中的空间占用也是动态的 所以程序加载好后需要重定位 需要把代码段的段地址和数据段的段地址 分别告诉 代码段寄存器(code segment) 和数据段寄存器(data segment) 让CPU 处理器 ...
分类:
其他好文 时间:
2016-03-29 23:53:41
阅读次数:
166
1. 链接器的意义 (1)每个C语言源文件被编译后生成目标文件,这些目标文件最终要被链接在一起生成可执行文件。 (2)链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。 2. 静态链接 (1)由链接器在链接时将库的内容直接加入到可执行程序中 (2)Linux下静态 ...
分类:
其他好文 时间:
2016-03-27 14:03:32
阅读次数:
232
程序的加载和执行(三)——读书笔记23接着上次的内容说。
关于过程load_relocate_program的讲解还没有完,还差创建栈段描述符和重定位符号表。分配栈空间与创建栈段描述符462 ;建立程序堆栈段描述符
463 mov ecx,[edi+0x0c] ;4KB的倍率
464 mov ebx,0x000fff...
分类:
编程语言 时间:
2016-03-27 01:49:21
阅读次数:
324
编译系统的构成 1.预处理阶段:预处理器处理字符#开头的命令,展开头文件; 2.编译阶段:编译器将预处理过的源程序翻译成汇编语言程序; 3.汇编阶段:汇编器将汇编程序翻译成机器语言指令; 4.链接阶段:链接器合并我们的可重定位目标文件和程序库的目标文件最终生成可执行目标文件。
分类:
其他好文 时间:
2016-03-12 14:37:20
阅读次数:
152
分为两部分 第一部分 LIBproject 用来生成LIB文件 #ifndef _myfun #define _myfun int myfun(int x,int y) { return x+y; } #endif 将lib文件放在Visual Studio\VC98\Lib文件夹里 将myfun.
分类:
编程语言 时间:
2016-03-01 14:23:51
阅读次数:
151