0
点赞
收藏
分享

微信扫一扫

1616_MIT 6.828 program header相关只是小结


​​GreyZhang/g_unix: some basic learning about unix operating system. (github.com)​​

         前面刚刚分析了elf的header,看了两行代码又遇到了program的header。又是一个概念类的问题,还得去简单了解下。

1616_MIT 6.828 program header相关只是小结_服务器

1. 这里面的信息其实是可能有多组的,形式上表现为结构体数组。

2. 这个信息只针对可执行文件以及共享目标文件有用的,其他类型的文件无效。

3. 这里有两个可能接下来我看代码用得到的信息,一个是偏移量,这个偏移量指的是段在文件中存放位置的偏移量。另一个是虚拟地址。

1616_MIT 6.828 program header相关只是小结_偏移量_02

1. 这里的物理地址的信息跟前面的虚拟地址类似。

2. 段文件镜像大小、段存储镜像大小,这样的概念在MCU的控制类软件开发中基本是看不到的概念。目前想找一个类比理解的模型有点困难。

3. 对齐方式这个还是很常见的一个概念的。

1616_MIT 6.828 program header相关只是小结_服务器_03

         程序header信息中会包含地址与大小等信息。不过,这里几页信息介绍了大量的SUN系统的内容。这个系统我们平时接触到的很少,但是从elf到现在的程序,似乎针对这个平台需要考虑的专用信息很多。

1616_MIT 6.828 program header相关只是小结_偏移量_04

         这里提到的几个段的属性,跟linux中的文件属性有一定的类似之处。

1616_MIT 6.828 program header相关只是小结_运维_05

         Text段一般是用来存储指令的,data中一般是存放数据的,但是也可能存指令。此外,这里还有一个之前基本没有接触到的,动态分配段信息。

1616_MIT 6.828 program header相关只是小结_偏移量_06

         这样,软件中相关的部分其实是一个memory镜像的加载实现。最前面的PH信息,是通过ELF header中的信息计算出来的。而这里计算一个PH的结束地址,主要还是因为我们看到的前面文档中提到PH其实是一个结构体数组信息,可能相关的信息都多个。

1616_MIT 6.828 program header相关只是小结_服务器_07

         JOS中PH的结构体信息比这一次文档中看到的Linux中信息要简单很多,但是参考这个Linux的文档比较容易理解各个元素的作用。

         这样,最初遇到的两部分基础概念基本就了解了,下一次可以直接做一下JOS的boot代码实现整理了。

举报

相关推荐

0 条评论