about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-10 20:32:29 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-10 20:32:29 +0200
commitacad3f3963d6f0b67526d91cf4683125dbbf4cb5 (patch)
treeb80b0a5057df7c0c298fe4ed0fdb50da7355087d /src
parent1f6ce24eaaa90353789817bd7d32b89af5e5f86a (diff)
downloadbox64-acad3f3963d6f0b67526d91cf4683125dbbf4cb5.tar.gz
box64-acad3f3963d6f0b67526d91cf4683125dbbf4cb5.zip
[BOX32] Actually fixed dlsym on RTLD_NEXT 32bits call
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/wrappedlibdl.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/wrapped/wrappedlibdl.c b/src/wrapped/wrappedlibdl.c
index 7d37f1e6..05655a20 100644
--- a/src/wrapped/wrappedlibdl.c
+++ b/src/wrapped/wrappedlibdl.c
@@ -366,7 +366,14 @@ void* my_dlsym(x64emu_t* emu, void *handle, void *symbol)
     }
     if(handle==(void*)~0LL) {
         // special case, look globably but no self (RTLD_NEXT)
-        elfheader_t *elf = FindElfAddress(my_context, *(uintptr_t*)R_RSP); // use return address to guess "self"
+        uintptr_t ret_addr = 0;
+        #ifdef BOX32
+        if(box64_is32bits)
+            ret_addr = from_ptri(ptr_t, R_ESP);
+        else
+        #endif
+            ret_addr = *(uintptr_t*)R_RSP;
+        elfheader_t *elf = FindElfAddress(my_context, ret_addr); // use return address to guess "self"
         if(GetNoSelfSymbolStartEnd(my_context->maplib, rsymbol, &start, &end, elf, 0, -1, NULL, 0, NULL)) {
             printf_dlsym(LOG_NEVER, "%p\n", (void*)start);
             pthread_mutex_unlock(&mutex);