diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-01-15 11:48:58 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-01-15 11:48:58 +0100 |
| commit | 72df0bd1a034f0e7f85b4d778f78ba2e542f5148 (patch) | |
| tree | 72099c6cf4d11fc41215f68c4eed493dbbf43ca1 /src/wrapped | |
| parent | 6035cbd5c1204d7c68bb144b948b0ee1c66061d9 (diff) | |
| download | box64-72df0bd1a034f0e7f85b4d778f78ba2e542f5148.tar.gz box64-72df0bd1a034f0e7f85b4d778f78ba2e542f5148.zip | |
Fixed dlsym with RTLD_NEXT and preloaded libs
Diffstat (limited to 'src/wrapped')
| -rw-r--r-- | src/wrapped/wrappedlibdl.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/wrapped/wrappedlibdl.c b/src/wrapped/wrappedlibdl.c index 81ee1ff6..2687b7ad 100644 --- a/src/wrapped/wrappedlibdl.c +++ b/src/wrapped/wrappedlibdl.c @@ -370,7 +370,7 @@ void* my_dlsym(x64emu_t* emu, void *handle, void *symbol) return NULL; } if(handle==(void*)~0LL) { - // special case, look globably but no self (RTLD_NEXT) + // special case, look globably after self in the lm chain (RTLD_NEXT) uintptr_t ret_addr = 0; #ifdef BOX32 if(box64_is32bits) @@ -379,7 +379,7 @@ void* my_dlsym(x64emu_t* emu, void *handle, void *symbol) #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)) { + if(GetNextSymbolStartEnd(my_context->maplib, rsymbol, &start, &end, elf, 0, -1, NULL, 0, NULL)) { printf_dlsym(LOG_NEVER, "%p\n", (void*)start); pthread_mutex_unlock(&mutex); return (void*)start; |