Linux relocation
2019-02-19 本文已影响0人
clive0x
Linux有symbol defining和symbol reference两个过程,在link阶段,需要由relocation建立两过程联系。

Elf32_Rel(对于x86_64就是Elf64_Rela)表达定义和引用之间的联系。
r_info即指向symbol defining
ELF32_R_SYM(info) ((info)>>8)
ELF32_R_TYPE(info) ((unsigned char)(info))
ELF64_R_SYM(info) ((info)>>32)
ELF64_R_TYPE(info) ((Elf64_Word)(info))
ELF32_R_SYM/ELF64_R_SYM算出来的是.dynsym表格中的table offset,需要由.rel.plt sh_link字段链接至.dynsym表。
r_offset,指向symbol reference。两种情况:
当type为ET_REL 时,r_offset为 需要重定向的section offset,Section需要由.rel.plt sh_info字段决定。
当type为ET_EXEC时,r_offset为重定向VA
引用原文地址:https://www.intezer.com/executable-and-linkable-format-101-part-3-relocations/