diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-01-05 22:50:14 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-01-05 22:50:14 +0100 |
| commit | 5e01769622b0d5edda8e42c994eff171887cc1d8 (patch) | |
| tree | facdf86bd22d1c76fb9fc65948c77f27dbda29ca /src | |
| parent | 97a1da81af3903c030f0b7287579b6680148b8b3 (diff) | |
| download | box64-5e01769622b0d5edda8e42c994eff171887cc1d8.tar.gz box64-5e01769622b0d5edda8e42c994eff171887cc1d8.zip | |
Made the missing symbol workaround more resiliant
Diffstat (limited to 'src')
| -rwxr-xr-x | src/elfs/elfloader.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 0927ab3c..eb10c55a 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -1578,7 +1578,7 @@ int dl_iterate_phdr_findsymbol(struct dl_phdr_info* info, size_t size, void* dat ElfW(Verdaux)* vda = (ElfW(Verdaux)*)(((uintptr_t)v) + v->vd_aux); for(int i=0; i<v->vd_cnt; ++i) { const char* vername = &strtab[vda->vda_name]; - if((s->addr = dlvsym(s->lib, s->name, vername))) { + if(vername && (s->addr = dlvsym(s->lib, s->name, vername))) { printf_log(LOG_DEBUG, "Found symbol with version %s, value = %p\n", vername, s->addr); return 1; // stop searching } @@ -1598,7 +1598,10 @@ void* GetNativeSymbolUnversionned(void* lib, const char* name) search_symbol_t s; s.name = name; s.addr = NULL; - s.lib = lib; + if(lib) + s.lib = lib; + else + s.lib = my_context->box64lib; printf_log(LOG_INFO, "Look for %s in loaded elfs\n", name); dl_iterate_phdr(dl_iterate_phdr_findsymbol, &s); return s.addr; |