本文描述和Intel架构相关,但是和操作系统无关的信息。既和Intel架构相关又和操作系统相关的部分在后续的章节讲述。
e_ident[EI_CLASS]的值为ELFCLASS32,e_ident[EI_DATA]的值为ELFDATA2LSB。
e_machine的值为EM_386。
e_flags为0。
重定向条目描述了如何修改指令和数据域。
Relocatable Fields 即重定向要修改的对象,是一个32位无符号数,有任意的字节对齐。字节序为小端。
下述重定向计算发生在链接器将可重定向目标文件转换成可执行或共享文件。链接器首选决定如何结合、定位输入文件,然后更新符号的值,最后执行重定向。应用到可执行文件和共享目标文件的重定向是类似的,取得相同的结果。
重定向类型及其计算方法如下:
Name | Value | Field | Calculation |
R_386_NONE | 0 | none | none |
R_386_32 | 1 | word32 | S+A |
R_386_PC32 | 2 | word32 | S+A-P |
Intel架构只使用Elf32_Rel重定向条目。所有情况下,加数和计算结果使用相同的字节序、即小端。
A,计算重定向域的加数。
P,要重定向的存储单元的地址(section offset或者地址),使用r_offset计算。
S,符号的值。