
程序员的自我修养学习笔记
风雨兼程8023
这个作者很懒,什么都没留下…
展开
-
《程序员的自我修养》学习笔记(一)————objdump和readelf
objdump , GNU目标文件可执行文件查看器-a: 列举.a文件中所有的目标文件-b bfdname: 指定BFD名。-C:对于C++符号名进行反修饰(Demangle)-g:显示调试信息-d:对包含机器指令的段进行反汇编-D:对所有的段进行反汇编-f:显示目标文件文件头-h:显示段表-l:显示行号信息-p:显示专有头部信息,具体内容取决于文件格式-r:显示重定位信息-R...原创 2019-09-10 23:15:23 · 304 阅读 · 0 评论 -
《程序员的自我修养》学习笔记(二)————目标文件(1):格式
现在PC平台流行的可执行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它们都是通用对象文件格式(Common Object File Format,COFF)的变种。目标文件就是源代码编译后但未进行链接的那些中间文件(Windows的.obj和Lin...原创 2019-09-14 19:42:58 · 302 阅读 · 0 评论 -
《程序员的自我修养》学习笔记(三)————目标文件(2):ELF相关结构体
我们通过《程序员的自我修养》学习笔记(二)————目标文件(1):格式大致了解了ELF文件的轮廓,接着就来看看ELF文件的结构格式。图1 ELF文件结构 ELF目标文件格式的最前部是ELF文件头(ELF Header),它包含了描述整个文件的基本信息,比如ELF的文件版本、目标机器型号、程序入口地址等。紧接着是ELF文件各个段。其中ELF文件中与段有关的重...原创 2019-09-15 16:40:20 · 438 阅读 · 0 评论 -
《程序员的自我修养》学习笔记(四)————静态链接
人们把每个源代码模块独立地编译,然后按照需要将它们“组装”起来,这个组装模块的过程就是链接。链接的主要内容就是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地链接。链接的过程主要包括地址与空间分配(Address and Storage Allocation)、符号决议(Symbol Resolution)和重定位(Relocation)等步骤。符号决议有时也叫做符号...原创 2019-09-22 14:35:20 · 360 阅读 · 0 评论 -
《程序员的自我修养》学习笔记(五)————可执行文件的装载与进程
可执行文件只有装载到内存中以后才能被CPU执行。早期的程序装载的基本过程就是把程序从外部存储器读到内存中的某个位置。随着硬件MMU的诞生,多进程、多用户、虚拟存储的操作系统的出现,装载过程变得复杂起来。程序,也就是可执行文件,是一个静态的概念,装载到内存中以后就成为了进程,进程是一个动态的概念,正所谓“Process is a program in execution”。1.虚...原创 2019-09-26 18:39:59 · 482 阅读 · 0 评论 -
《程序员的自我修养》学习笔记(六)————动态链接(1):为什么要动态链接
1.静态链接缺点 静态链接诸多缺点,比如浪费内存和磁盘空间、模块更新困难等。 内存和磁盘空间:静态链接的方式对于计算机内存和磁盘的空间浪费非常严重,特别是在多进程操作系统情况下。每个进程都有静态库的备份,非常浪费内存空间。 程序开发和发布:空间浪费是静态链接的一个问题,另一个问题是静态链接对程序的更新、部署和发布也会带来很多麻烦。一旦程序中...原创 2019-09-26 22:03:01 · 402 阅读 · 1 评论 -
《程序员的自我修养》学习笔记(七)————动态链接(2):地址无关码与延迟绑定
1.地址无关代码1.1装载时重定位 为了能够使共享对象在任意地址装载,我们首先想到的方法就是静态链接中的重定位。这个想法的基本思路就是,在链接时,对所有绝对地址的引用不作重定位,而把这一步推迟到装载时再完成。一旦模块装载地址确定,即目标地址确定,那么系统就对程序中所有的绝对地址引用进行重定位。 我们前面在静态链接时提到过重定位,那时的重定位叫做链接时重定位(...原创 2019-09-28 14:11:55 · 739 阅读 · 0 评论 -
《程序员的自我修养》学习笔记(九)————动态链接(4):动态链接的步骤和实现
动态链接的步骤基本上分为3步:先是启动动态链接器本身,然后装载所有需要的共享对象,最后是重定位和初始化。1.动态链接器自举 动态链接器本身也是一个共享对象,但是事实上它有一些特殊性。对于普通共享对象文件来说,它的重定位工作由动态链接器来完成;它也可以依赖于其它共享对象,其中的被依赖的共享对象由动态链接器负责链接和装载。动态链接器的特殊性:首先是,动态链接器本...原创 2019-10-06 22:05:49 · 290 阅读 · 0 评论 -
《程序员的自我修养》学习笔记(八)————动态链接(3):动态链接相关结构
动态链接在不同的系统上有不同的实现方式,ELF的动态链接实现方式比PE稍微简单一点。动态链接情况下,可执行文件的装载与静态链接情况基本一样。首先操作系统会读取可执行文件的头部,检查文件的合法性,然后从头部中的”Program Header”中读取每个”Segment”的虚拟地址、文件地址和属性,并将它们映射到进程虚拟空间的相应位置,这些步骤跟前面的静态链接情况下的装载基本无异。在静...原创 2019-10-02 22:28:16 · 479 阅读 · 0 评论