From: yu.dongliang <18588496441@163.com> Date: Thu, 7 Aug 2025 09:38:25 +0000 (+0800) Subject: fix: __x64_so_add_dyn() X-Git-Url: http://baseworks.info/?a=commitdiff_plain;h=1bf190cb60c8c3b311aee68c3988ed606a6c42f2;p=scf.git fix: __x64_so_add_dyn() --- diff --git a/elf/scf_elf_x64_so.c b/elf/scf_elf_x64_so.c index 236e9a4..46b1df7 100644 --- a/elf/scf_elf_x64_so.c +++ b/elf/scf_elf_x64_so.c @@ -170,10 +170,7 @@ static int _x64_elf_add_gnu_hash(elf_native_t* x64, elf_section_t** ps) #define HASH_BUCKETS 3 #define HASH_BLOOMS 1 - int n_syms = x64->dynsyms->size; - - if (x64->dyn_relas) - n_syms -= x64->dyn_relas->size; + int n_syms = x64->dynsyms->size - x64->n_plts; int len = sizeof(uint32_t) * 4 + sizeof(uint64_t) * HASH_BLOOMS + sizeof(uint32_t) * HASH_BUCKETS @@ -833,12 +830,9 @@ int __x64_so_add_dyn(elf_native_t* x64, const char* sysroot) scf_string_t* str = scf_string_alloc(); char c = '\0'; - int j = 0; + int j = x64->n_plts; int i; - if (x64->dyn_relas) - j = x64->dyn_relas->size; - scf_string_cat_cstr_len(str, &c, 1); for (i = 0; i < x64->dynsyms->size; i++) { @@ -919,7 +913,7 @@ int __x64_so_add_dyn(elf_native_t* x64, const char* sysroot) dyns[i + 8].d_tag = DT_JMPREL; dyns[i + 5].d_un.d_ptr = (uintptr_t)x64->got_plt; - dyns[i + 6].d_un.d_ptr = sizeof(Elf64_Rela); + dyns[i + 6].d_un.d_ptr = x64->rela_plt->data_len; dyns[i + 7].d_un.d_ptr = DT_RELA; dyns[i + 8].d_un.d_ptr = (uintptr_t)x64->rela_plt;