阅读笔记-程序员的自我修养
wangruiqics
这个作者很懒,什么都没留下…
展开
-
阅读笔记-程序员的自我修养7
7.1 为什么要动态链接要解决空间浪费和更新困难这两个问题最简单的办法就是把程序的模块相互分割开来,形成独立的文件,而不再将它们静态地链接在一起。简单地讲,就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。也就是说,把链接这个过程推迟到了运行时再进行,这就是动态链接(Dynamic Linking)的基本思想磁盘和内存中只存在一份Lib.o,而不是两份。另外在内存中共享一个目标文件7.3 地址无关代码...原创 2020-09-18 17:57:48 · 145 阅读 · 0 评论 -
阅读笔记-程序员的自我修养6
6.1PAE从硬件层面上来讲,原先的32位地址线只能访问最多4 GB的物理内存。但是自从扩展至36位地址线之后,Intel修改了页映射的方式,使得新的映射方式可以访问到更多的物理内存。这个地址扩展方式叫做PAE(physical address extend)缺页加载略6.4.1描述了ELF文件该如何被操作系统映射到进程的虚拟空间:readelf -l SectionMapping.elfcat /proc/21963/maps操作系统通过给进程空间划分出一个个VMA来管理进程的虚拟空间;基本原创 2020-09-18 17:58:24 · 135 阅读 · 0 评论 -
阅读笔记-程序员的自我修养4
4.1 空间与地址分配目标文件“a.o”和“b.o”,输出可执行文件“ab”。可执行文件中的代码段和数据段都是由输入的目标文件中合并而来的4.1.2 相似段合并第一步 空间与地址分配所有的输入目标文件的各个段的长度、属性和位置,并且将它们合并,计算出输出文件中各个段合并后的长度与位置,并建立映射关系。符号定义和符号引用,放到全局符号表。第二步 符号解析与重定位使用上面第一步中收集到的所有信息,读取输入文件中段的数据、重定位信息,进行符号解析与重定位、调整代码中的地址//a.o ob原创 2020-09-18 17:58:17 · 141 阅读 · 0 评论 -
阅读笔记-程序员的自我修养3
elf文件格式3.2段file header 描述文件属性是否可执行、是静态链接还是动态链接及入口地址(如果是可执行文件)目标硬件、目标操作系统段表(Section Table),是一个描述文件中各个段的数组。段表描述了文件中各个段在文件中的偏移位置及段的属性等,从段表里面可以得到每个段的所有信息全局变量和局部静态变量已初始化的 . data段;未初始化的 .“bss”段。未初始化的全局变量和局部静态变量默认值都为0,在.data段分配空间并且存放数据0是没有必要的。程序运行的时候它原创 2020-09-18 17:58:08 · 214 阅读 · 0 评论 -
阅读笔记-程序员的自我修养2
预编译将所有的“#define”删除,并且展开所有的宏定义处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。注意,这个过程是递归进行的,也就是说被包含的文件可能还包含其他文件保留所有的#pragma编译器指令编译汇编gcc –c hello.c –o hello.o链接重定位比如我们在第1条指令之后、第5条指令之前插入了一条或多条指令,那么第5条指令及后面的指令的位置将会相应地往后移动使用符号来标记位置符号符号(Symbol)这个概念.原创 2020-09-18 17:58:00 · 85 阅读 · 0 评论