为什么 Elf64 在 64 位 x86 上不使用 Elf64_Rel 重定位?
Why doesn't Elf64 use Elf64_Rel for relocations on 64-bit x86?
https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-54839.html#chapter7-2 状态:
64–bit SPARC and 64–bit x86 use only Elf64_Rela relocation entries. Thus, the r_addend member serves as the relocation addend. x86 uses only Elf32_Rel relocation entries. The field to be relocated holds the addend.
存在一个 Elf64_Rel
结构,那么为什么不在 64 位 x86 目标上使用它呢?在这里使用 Elf64_Rela
不会浪费 space 因为预重定位地址只是被忽略了(或者至少从我在测试中看到的总是 0)?
注:r_addend
在Elf64_Rel
中被省略,不是简单的未使用。
There exists an Elf64_Rel struct, so why isn't it being used on 64-bit x86 targets?
在 x86_64
上,有几个可能的 memory models. By default, the small memory model 被使用,不需要任何 64 位重定位。
如果使用 -mcmodel=large
编译,则将使用 64 位重定位 。
https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-54839.html#chapter7-2 状态:
64–bit SPARC and 64–bit x86 use only Elf64_Rela relocation entries. Thus, the r_addend member serves as the relocation addend. x86 uses only Elf32_Rel relocation entries. The field to be relocated holds the addend.
存在一个 Elf64_Rel
结构,那么为什么不在 64 位 x86 目标上使用它呢?在这里使用 Elf64_Rela
不会浪费 space 因为预重定位地址只是被忽略了(或者至少从我在测试中看到的总是 0)?
注:r_addend
在Elf64_Rel
中被省略,不是简单的未使用。
There exists an Elf64_Rel struct, so why isn't it being used on 64-bit x86 targets?
在 x86_64
上,有几个可能的 memory models. By default, the small memory model 被使用,不需要任何 64 位重定位。
如果使用 -mcmodel=large
编译,则将使用 64 位重定位 。