From e739a7470524d6c9145dc126b3345fb2fbff0367 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 4 Dec 2022 16:52:38 +0100 Subject: Improved RunElfInitPltResolver function --- src/elfs/elfloader.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index f0e5be67..2b9807ee 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -1172,7 +1172,7 @@ void RunElfInitPltResolver(elfheader_t* h, x64emu_t *emu) uintptr_t p = h->initentry + h->delta; printf_dump(LOG_DEBUG, "Calling Init for %s @%p\n", ElfName(h), (void*)p); h->init_done = 1; - R_RBP -= 32*8; // take some space + R_RSP -= 32*8; // take some space // save regs uintptr_t old_rdi = R_RDI; uintptr_t old_rsi = R_RSI; @@ -1180,6 +1180,8 @@ void RunElfInitPltResolver(elfheader_t* h, x64emu_t *emu) uintptr_t old_rcx = R_RCX; uintptr_t old_r8 = R_R8; uintptr_t old_r9 = R_R9; + uintptr_t old_r10 = R_R10; + uintptr_t old_r11 = R_R11; uintptr_t old_rax = R_RAX; if(h->initentry) RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv, my_context->envv); @@ -1201,8 +1203,10 @@ void RunElfInitPltResolver(elfheader_t* h, x64emu_t *emu) R_RCX = old_rcx; R_R8 = old_r8; R_R9 = old_r9; + R_R10 = old_r10; + R_R11 = old_r11; R_RAX = old_rax; - R_RBP += 32*8; // take some space + R_RSP += 32*8; // take some space printf_dump(LOG_DEBUG, "All Init Done for %s\n", ElfName(h)); return; } -- cgit 1.4.1