about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-04 21:48:03 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-04 21:48:03 +0100
commit2e3c25f8e17fd73edd59d3e818e48e56f373c058 (patch)
tree80050403cd7d6ca4a5ad1f1a26fa91dc34eaafe5 /src
parent68d4683010600d87b0967dc4ef701f1226e78679 (diff)
downloadbox64-2e3c25f8e17fd73edd59d3e818e48e56f373c058.tar.gz
box64-2e3c25f8e17fd73edd59d3e818e48e56f373c058.zip
Fixed __libc_start_main emulation
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64run_private.c6
-rwxr-xr-xsrc/wrapped/wrappedlibc.c6
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];