全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
前面刚刚分析了elf的header,看了两行代码又遇到了program的header。又是一个概念类的问题,还得去简单了解下。
1. 这里面的信息其实是可能有多组的,形式上表现为结构体数组。
2. 这个信息只针对可执行文件以及共享目标文件有用的,其他类型的文件无效。
3. 这里有两个可能接下来我看代码用得到的信息,一个是偏移量,这个偏移量指的是段在文件中存放位置的偏移量。另一个是虚拟地址。
1. 这里的物理地址的信息跟前面的虚拟地址类似。
2. 段文件镜像大小、段存储镜像大小,这样的概念在MCU的控制类软件开发中基本是看不到的概念。目前想找一个类比理解的模型有点困难。
3. 对齐方式这个还是很常见的一个概念的。
程序header信息中会包含地址与大小等信息。不过,这里几页信息介绍了大量的SUN系统的内容。这个系统我们平时接触到的很少,但是从elf到现在的程序,似乎针对这个平台需要考虑的专用信息很多。
这里提到的几个段的属性,跟linux中的文件属性有一定的类似之处。
Text段一般是用来存储指令的,data中一般是存放数据的,但是也可能存指令。此外,这里还有一个之前基本没有接触到的,动态分配段信息。
这样,软件中相关的部分其实是一个memory镜像的加载实现。最前面的PH信息,是通过ELF header中的信息计算出来的。而这里计算一个PH的结束地址,主要还是因为我们看到的前面文档中提到PH其实是一个结构体数组信息,可能相关的信息都多个。
JOS中PH的结构体信息比这一次文档中看到的Linux中信息要简单很多,但是参考这个Linux的文档比较容易理解各个元素的作用。
这样,最初遇到的两部分基础概念基本就了解了,下一次可以直接做一下JOS的boot代码实现整理了。