From 672a41a79cbcfa095d6951112d592354e0efbd5a Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 3 Jul 2022 14:14:17 +0200 Subject: Added support for R_X86_64_IRELATIVE reloc, along with a test for it (for #303) --- src/elfs/elfloader.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 44582846..eacafa0d 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -620,6 +620,14 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t printf_dump(LOG_NEVER, "Apply %s R_X86_64_RELATIVE @%p (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, *(void**)p, (void*)(head->delta+ rela[i].r_addend)); *p = head->delta+ rela[i].r_addend; break; + case R_X86_64_IRELATIVE: + { + x64emu_t* emu = thread_get_emu(); + EmuCall(emu, head->delta+rela[i].r_addend); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_IRELATIVE @%p (%p -> %p()=%p)\n", (bind==STB_LOCAL)?"Local":"Global", p, *(void**)p, (void*)(head->delta+ rela[i].r_addend), (void*)(R_RAX)); + *p = R_RAX; + } + break; case R_X86_64_COPY: globoffs = offs; globend = end; -- cgit 1.4.1