在程式头表中,可载入段入口是以 p_vaddr 的升序排列的。
* PT_DYNAMIC
该数组元素指定动态链接信息。参阅 后面的“动态部分”以获得更多信息。
* PT_INTERP
该数组元素指定一个 null-terminated 路径名的位置和大小(作为解释程式)。
这种段类型仅仅对可执行文档有意义(尽管他可能发生在一个共享 object 上);
他在一个文档中只能出现一次。假如他出现,他必须先于任何一个可载入段入口。
参阅 后面的“程式解释器”(Program Interpreter)以获得更多的信息。
* PT_NOTE
该数组元素指定辅助信息的位置和大小。参阅 后面的“注意部分”以获得细节。
* PT_SHLIB
该段类型保留且具备未指定的语义。具备一个这种类型数组元素的程式并不
遵守 ABI 。
* PT_PHDR
该数组元素(假如出现),指定了程式头表本身的位置和大小(包括在文档中
和在该程式的内存映像中)。更进一步来说,他仅仅在该程式头表是程式内存映像
的一部分时才有效。假如他出现,他必须先于任何可载入段入口。参阅 后面的
“程式解释器”(Program Interpreter)以获得更多的信息。
* PT_LOPROC through PT_HIPROC
该范围中的值保留用于特定处理器的语义。
注意:除非在别处的特别需要,任何的程式头的段类型是可选的。也就是说,
一个文档的程式头表也许仅仅包含和其内容相关的元素。
Base Address(基地址)
可执行和共享的 object file 有一个基地址,该基地址是和程式的 object file
在内存中映像相关的最低虚拟地址。基地址的用途之一是在动态链接过程中重定位
该程式的内存映像。
一个可执行的 object file 或 一个共享的 object file 的基地址是在
执行的时候从三个值计算而来的:内存载入地址、页面大小的最大值 和 程式可
载入段的最低虚拟地址。就象在“程式载入”中所描述的那样,程式头中的虚拟地址
也许和程式的内存映像中实际的虚拟地址并不相同。为了计算基地址,必须确定和
PT_LOAD 段 p_vaddr 的最小值相关的内存地址。获得基地址的方法是将内存
地址截去最大页面大小的最接近的整数倍。由于依赖载入内存中的文档类型,
该内存地址和 p_vaddr 值可能匹配也可能不匹配。
就象在第一部分中 "Section" 中描述的那样, .bss section 具备 SHT_NOBITS
的类型。尽管在文档中不占用空间,他在段的内存映像中起作用。通常,没有初始化
的数据驻留在段尾,因此使得在相关的程式头元素中的 p_memsz 比 p_filesz 大。
Note Section(注解部分)
有的时候供给商或系统设计者需要用特定的信息标记一个
object file 以便其他程式检查其兼容的一致性,等等此类。 SHT_NOTE
类型的 section 和 PT_NOTE 类型的程式头元素能够被用于此目的。 section
和程式头中的注解信息包含了任意数目的入口,每一个入口的格式都是对应于特定
处理器格式的 4-字节数组。下面的标签有助于解释注释信息的组织形式,但是这些
标签不是规格说明的一部分。
Figure 2-3: Note Information
namesz
descsz
type
name ...
desc ...
* namesz and name
名字中 namesz 的第一个字节包含了一个 null-terminated 字符
表达了该入口的拥有者或始发者。没有正式的机制来避免名字冲突。从
惯例来说,供给商使用他们自己的名称,比如 "XYZ Computer Company" ,
作为标志。假如没有提供名字, namesz 值为 0 。 假如有必要,确定
描述信息4-字节对齐。 这样的填充信息并不包含在namesz 中。
* descsz and desc
desc 中 descsz 的首字节包含了注解描述符。ABI 不会在一个描述符内容中
放入任何系统参数。假如没有描述符, descsz 将为 0 。 假如有必要,确定
描述信息4-字节对齐。 这样的填充信息并不包含在descsz中。
* type
该 word 给出了描述符的解释。每一个创造着(originator) 控制着自己的类型;
对于单单一个类型值的多种解释是可能存在的。因此,一个程式必须辨认出该名字
和其类型以便理解一个描述符。这个时候的类型必须是非负的。ABI 没有定义
描述符的含义。
为了举例说明,下面的解释段包含两个入口。
Figure 2-4: Example Note Segment
0 1 2 3
-------------------
namesz 7
descsz 0 No descriptor
type 1
name X Y Z spc
C o pad
namesz 7
descsz 8
type 3
name X Y Z spc
C o pad
desc word0
word1
注意:系统保留的注解信息没有名字 (namesz==0) ,有一个零长度的名字
(name[0]==‘‘) 现在还没有类型为其定义。任何其他的名字必须至少有
一个非空的字符。
注意:注解信息是可选的。注解信息的出现并不影响一个程式的 ABI 一致性,
前提是该信息不影响程式的执行行为。否则,该程式将不遵循 ABI 并将出现
未定义的行为。
===================== Program Loading(程式载入) =====================
当创建或增加一个进程映像的时候,系统在理论上将拷贝一个文档的段到一个虚拟
的内存段。系统什么时候实际地读文档依赖于程式的执行行为,系统载入等等。一个
进程仅仅在执行时需要引用逻辑页面的时候才需要一个物理页面,实际上进程通常会
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




