摘要:曾经在某本书上看到一句话,具体怎么说的我已经记不清了,但是有三个字我还记得----中间层下面说下我所碰到的中间层1. 可执行文件和物理地址空间中间层是虚拟地址空间可执行文件程序头表中描述了可执行文件和虚拟地址空间的映射关系在创建一个进程的时候会处理物理地址与该进程虚拟地址空间的关系这样通过虚拟地址空间实现了磁盘上文件和物理内存的联系2 磁盘上的文件和物理内存中的内容中间层缓冲区(虽说该缓冲区仍在物理内存中0.12)缓冲区负责把磁盘块读到缓冲区中,同时也负责把缓冲区中的内容写回磁盘一些修改操作都在缓冲区中进行,只要最后把该缓冲区置脏就行了未完待续
阅读全文
摘要:详见程序员的自我修养P107这里我重点手说下符号表和重定位表是怎么联系起来的重定位表中有若干项重定位入口,每一个重定位入口其实就是一个数据结构typedef struct{ Elf32_Addr r_offset; Elf32_Word r_info;}重定位入口的偏移表示该入口在要被重定位的段中的位移(比如说在代码段的偏移值),被重定位的段可以是代码段数据段等或者说是该重定位入口所要修正的位置的第一个字节相对于段的偏移r_info 重定位的入口的类型和符号。这个成员的低八位表示重定位入口的类型,高24位表示重定位入口的符号在符号表中的下标这里又提到符号表,什么是符号表呢...
阅读全文
摘要:原本以为栈就那回事,存放一下临时变量,参与一下函数的调用,但是今天看《程序员的自我修养》又让我对栈加深了了解我这里只想说下我不知道的,至于那些调用惯例我就不多说了,理解起来不是很难除了参数的传递之外,函数与调用方的几哦啊胡还有一个渠道就是返回值,eax是传递返回值的同道,但是eax本身只有4字节,大于4字节的采用edx和eax做返回值,而对于超过8字节的返回类型参照下面的例子 1 typedef struct big_thing 2 { 3 char buf[128]; 4 }big_thing; 5 6 big_thing return_test() 7 { 8 big_t...
阅读全文
摘要:在《自己动手写操作系统》中有一段代码,通过这段代码大致可以让人知道装载是怎么回事(静态链接)首先要分析下elf的文件结构,我就简单的说了,elf首先是一个文件头表,顾名思义,这个文件头表里面保存的是文件的信息,其中一个很重要的信息是程序的入口地址,接着还有若干程序头表,这个比较重要,每一个程序头表对应着elf可执行文件中的一段。程序头表中包含有所描述的段要加载到内存的那个位置,还有段的大小。有了上述这些信息,下面就来说下程序的装载的步骤:1. 检查elf可执行文件格式的有效性,比如魔术,程序头表中段的数量2.根据elf可执行文件的程序头表的描述,对elf文件进行映射,比如代码,数据,只读数据3
阅读全文
摘要:可执行文件的装载分为三个部分1:创建的独立的虚拟地址空间 2:读取可执行文件的头部,并且建立虚拟空间与可执行文件的映射关系。3:将cpu通过指令寄存器设置可执行文件入口,启动运行
阅读全文