ELF文件中的重定位附加信息-Elf64_Rel与Elf64_Rela?

问题描述 投票:1回答:1

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;

我想看一看重定位条目,但是我不确定要使用哪个重定位条目,手册页对此非常含糊。每种都有特定用法吗?

linux gcc elf
1个回答
0
投票

这取决于目标。大多数目标仅使用两种形式之一。 Relocation(ELF规范)的System V Application Binary Interface一章说:

如前所述,只有Elf32_RelaElf64_Rela条目包含显式加数。类型为Elf32_RelElf64_Rel的条目在要修改的位置存储一个隐式加数。根据处理器体系结构,一种形式或另一种形式可能是必需的或更方便的。因此,特定机器的实现可以根据上下文使用一种形式,也可以只使用一种形式。

ELF格式是自描述的,它表示是否使用了REL或RELA重定位(节类型为SHT_RELSHT_RELADT_RELDT_RELSZDT_RELENTDT_RELA ,动态部分中的DT_RELASZDT_RELAENT)。但是重定位处理本身是非常特定于目标的。

© www.soinside.com 2019 - 2024. All rights reserved.