diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-12-04 16:52:38 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-12-04 16:52:38 +0100 |
| commit | e739a7470524d6c9145dc126b3345fb2fbff0367 (patch) | |
| tree | 783dbb66c164c6da2bb68f98d85407306f7e4383 /src | |
| parent | c0d401fbfc13fa5e0b139448c5e218196662f279 (diff) | |
| download | box64-e739a7470524d6c9145dc126b3345fb2fbff0367.tar.gz box64-e739a7470524d6c9145dc126b3345fb2fbff0367.zip | |
Improved RunElfInitPltResolver function
Diffstat (limited to 'src')
| -rwxr-xr-x | src/elfs/elfloader.c | 8 |
1 files changed, 6 insertions, 2 deletions
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; } |