Fixed __libc_start_main emulation

This commit is contained in:
ptitSeb 2021-03-04 21:48:03 +01:00
parent 68d4683010
commit 2e3c25f8e1
2 changed files with 6 additions and 6 deletions

View File

@ -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);

View File

@ -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];