diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-04 21:48:03 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-04 21:48:03 +0100 |
| commit | 2e3c25f8e17fd73edd59d3e818e48e56f373c058 (patch) | |
| tree | 80050403cd7d6ca4a5ad1f1a26fa91dc34eaafe5 /src | |
| parent | 68d4683010600d87b0967dc4ef701f1226e78679 (diff) | |
| download | box64-2e3c25f8e17fd73edd59d3e818e48e56f373c058.tar.gz box64-2e3c25f8e17fd73edd59d3e818e48e56f373c058.zip | |
Fixed __libc_start_main emulation
Diffstat (limited to 'src')
| -rwxr-xr-x | src/emu/x64run_private.c | 6 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index 2eb68b48..9d8dfd25 100755 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -32,9 +32,6 @@ int32_t EXPORT my___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, c //TODO: register rtld_fini //TODO: register fini // let's cheat and set all args... - Push(emu, (uint64_t)my_context->envv); - Push(emu, (uint64_t)my_context->argv); - Push(emu, (uint64_t)my_context->argc); if(init) { PushExit(emu); R_RIP=(uint64_t)*init; @@ -47,6 +44,9 @@ int32_t EXPORT my___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, c printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_start_main\n", my_context->argc, my_context->argv, my_context->envv, main); // call main and finish PushExit(emu); + SetRDX(emu, (uint64_t)my_context->envv); + SetRSI(emu, (uint64_t)my_context->argv); + SetRDI(emu, (uint64_t)my_context->argc); R_RIP=(uint64_t)main; #ifdef DYNAREC DynaRun(emu); diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 4c2fd048..00b2f417 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -368,17 +368,17 @@ static void* findcompare64Fct(void* fct) #undef SUPER +#endif // some my_XXX declare and defines int32_t my___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), - void (*rtld_fini) (void), void (* stack_end)); // implemented in x86run_private.c + void (*rtld_fini) (void), void (* stack_end)); // implemented in x64run_private.c EXPORT void my___libc_init_first(x64emu_t* emu, int argc, char* arg0, char** b) { // do nothing specific for now return; } -#endif -uint64_t my_syscall(x64emu_t *emu); // implemented in x86syscall.c +uint64_t my_syscall(x64emu_t *emu); // implemented in x64syscall.c void EXPORT my___stack_chk_fail(x64emu_t* emu) { char buff[200]; |