Мои извинения за мой плохой английский, действительно с трудом понимая, что это sh_info поле содержит для перемещения секции, следующее, что я получаю от ELF документа:перемещение информации заголовка раздела в .elf файл
Это говорит
sh_info: содержит индекс заголовка раздела секции , к которому относится перемещение
sh_link: содержит индекс заголовка раздела соответствующей таблицы символов.
Очевидно, что sh_info не относится к разделу таблицы символов, к которому относится раздел перемещения, информация которого хранится в sh_link.
Основываясь на моем понимании: при перемещении символа связаны три раздела: раздел перемещения, секция таблицы символов и раздел, содержащий определение символов для символов в таблице символов.
Предположение 1: Так я полагаю sh_info о третьей части упомянутого впереди
----- Однако, когда я иду через образец кода для перемещения, мое предположение, похоже, не соответствует
static int elf_do_reloc(Elf32_Ehdr *hdr, Elf32_Rel *rel, Elf32_Shdr *reltab) {
Elf32_Shdr *target = elf_section(hdr, reltab->sh_info);
int addr = (int)hdr + target->sh_offset;
int *ref = (int *)(addr + rel->r_offset);
// Symbol value
int symval = 0;
if(ELF32_R_SYM(rel->r_info) != SHN_UNDEF) {
symval = elf_get_symval(hdr, reltab->sh_link, ELF32_R_SYM(rel->r_info));
if(symval == ELF_RELOC_ERR) return ELF_RELOC_ERR;
}
----- Sicce r_info является полем только запись в секции перемещения содержит
, что означает, что sh_info - это индекс самой секции перемещения. < Допущение 2
Что меня смущает больше, является примером кто-то другой должности, reading elf file example
, кажется, поле sh_info информация не ничего, связанных с моим предыдущим 2 допущениях
Может кто-нибудь, пожалуйста, помогите объяснить что действительно содержит sh_info?