Content #
一个重定位表同时也是ELF的一个段,段的类型(sh_type)是“SHT_REL”。它的“sh_link”表示符号表的下标,它的“sh_info”表示它作用于哪个段。比如“.rel.text”作用于“.text”段,而“.text”段的下标为“1”,那么“.rel.text”的“sh_info”为“1”。
重定位表是一个Elf32_Rel结构的数组,Elf32_Rel定义如下:
/* Relocation table entry without addend (in section of type SHT_REL). */
typedef struct
{
Elf32_Addr r_offset; /* Address */
Elf32_Word r_info; /* Relocation type and symbol index */
} Elf32_Rel;
r_offset #
重定位入口的偏移地址。可重定位文件中,该值表示生定位入口所要修正的位置的第一个字节相对于段起始的偏移。可执行文件或共享对象文件中,该值表示重定位入口所要修正的位置的第一个字节的虚拟地址。
r_info #
低8位表示重定位入口的类型,高24位表示重定位入口的符号在符号表中的下标。
From #
程序员的自我修养