diff options
Diffstat (limited to 'src/elfs')
| -rw-r--r-- | src/elfs/elfloader.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 10bb7b02..6c782c52 100644 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -1169,8 +1169,12 @@ void RunElfInit(elfheader_t* h, x64emu_t *emu) RunElfInit(lib_elf, emu); } printf_dump(LOG_DEBUG, "Calling Init for %s @%p\n", ElfName(h), (void*)p); - if(h->initentry) - RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv, my_context->envv); + if(h->initentry) { + if(box64_is32bits) + RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv32, my_context->envv32); + else + RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv, my_context->envv); + } printf_dump(LOG_DEBUG, "Done Init for %s\n", ElfName(h)); // and check init array now #ifdef BOX32 @@ -1179,7 +1183,7 @@ void RunElfInit(elfheader_t* h, x64emu_t *emu) for (size_t i=0; i<h->initarray_sz; ++i) { if(addr[i]) { printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), from_ptrv(addr[i])); - RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv32, my_context->envv32); } } } else |