ELF 文件中的重定位加数 - Elf64_Rel 与 Elf64_Rela?
Relocation addend in ELF files - Elf64_Rel vs Elf64_Rela?
ELF 文件包含两个处理重定位的结构:
Elf64_Rel:
typedef struct {
Elf64_Addr r_offset;
Uint64_t
r_info;
} Elf64_Rel;
和Elf64_Rela:
typedef struct {
Elf64_Addr r_offset;
uint64_t
r_info;
int64_t
r_addend;
} Elf64_Rela;
我想看一下重定位条目,但我不确定要使用哪一个,手册页对此非常隐晦。每个都有特定的用法吗?
这取决于目标。大多数目标仅使用两种形式中的一种。 Relocation chapter in the System V Application Binary Interface(ELF 规范)是这样说的:
As specified previously, only Elf32_Rela
and Elf64_Rela
entries contain an explicit addend. Entries of type Elf32_Rel
and Elf64_Rel
store an implicit addend in the location to be modified. Depending on the processor architecture, one form or the other might be necessary or more convenient. Consequently, an implementation for a particular machine may use one form exclusively or either form depending on context.
ELF 格式是自描述的,因为它显示是否使用 REL 或 RELA 重定位(SHT_REL
或 SHT_RELA
用于节类型;DT_REL
、DT_RELSZ
、DT_RELENT
或 DT_RELA
、DT_RELASZ
、DT_RELAENT
(在动态部分)。但是重定位处理本身是非常针对特定目标的。
ELF 文件包含两个处理重定位的结构:
Elf64_Rel:
typedef struct {
Elf64_Addr r_offset;
Uint64_t
r_info;
} Elf64_Rel;
和Elf64_Rela:
typedef struct {
Elf64_Addr r_offset;
uint64_t
r_info;
int64_t
r_addend;
} Elf64_Rela;
我想看一下重定位条目,但我不确定要使用哪一个,手册页对此非常隐晦。每个都有特定的用法吗?
这取决于目标。大多数目标仅使用两种形式中的一种。 Relocation chapter in the System V Application Binary Interface(ELF 规范)是这样说的:
As specified previously, only
Elf32_Rela
andElf64_Rela
entries contain an explicit addend. Entries of typeElf32_Rel
andElf64_Rel
store an implicit addend in the location to be modified. Depending on the processor architecture, one form or the other might be necessary or more convenient. Consequently, an implementation for a particular machine may use one form exclusively or either form depending on context.
ELF 格式是自描述的,因为它显示是否使用 REL 或 RELA 重定位(SHT_REL
或 SHT_RELA
用于节类型;DT_REL
、DT_RELSZ
、DT_RELENT
或 DT_RELA
、DT_RELASZ
、DT_RELAENT
(在动态部分)。但是重定位处理本身是非常针对特定目标的。