From 5923a9089fc29023cd26ba5303165bf65fa43201 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Thu, 3 Jul 2025 12:10:44 +0200 Subject: [BOX32] Relaunch box32 to set personality to 32bits --- src/core.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src') diff --git a/src/core.c b/src/core.c index 82eb20cd..3ccbb85e 100644 --- a/src/core.c +++ b/src/core.c @@ -15,6 +15,9 @@ #include #include #include +#ifdef BOX32 +#include +#endif #ifdef DYNAREC #include #include @@ -1149,6 +1152,29 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf } #ifdef BOX32 box64_is32bits = FileIsX86ELF(my_context->fullpath); + // try to switch personality, but only if not already tried + if(box64_is32bits) { + int tried = getenv("BOX32_PERSONA32BITS")?1:0; + if(tried) { + unsetenv("BOX32_PERSONA32BITS"); + int p = personality(0xffffffff); + if(p==ADDR_LIMIT_32BIT) printf_log(LOG_INFO, "Personality set to 32bits\n"); + } else { + if(personality(ADDR_LIMIT_32BIT)!=-1) { + int nenv = 0; + while(env[nenv]) nenv++; + // alloc + "LD_PRELOAD" if needd + last NULL ending + char** newenv = (char**)box_calloc(nenv+1+1, sizeof(char*)); + // copy strings + for (int i=0; i