From dabbca767f9de4fc4cf68252037de3061592eae2 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 9 Jul 2023 12:38:48 +0200 Subject: [ELFLOADER] Added a check if lib version is compatible with what the elf loading it wants (helps Linux games on Steam) --- src/elfs/elfloader.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/elfs/elfloader.c') diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 4caa07ce..7977b592 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -374,6 +374,23 @@ int LoadElfMemory(FILE* f, box64context_t* context, elfheader_t* head) return 0; } +int isElfHasNeededVer(elfheader_t* head, const char* libname, elfheader_t* verneeded) +{ + if(!verneeded || !head) + return 1; + if(!head->VerDef || !verneeded->VerNeed) + return 1; + int cnt = GetNeededVersionCnt(verneeded, libname); + for (int i=0; ipath, vername); + return 0; // missing version + } + } + return 1; +} + int ReloadElfMemory(FILE* f, box64context_t* context, elfheader_t* head) { (void)context; @@ -1201,7 +1218,7 @@ int LoadNeededLibs(elfheader_t* h, lib_t *maplib, int local, int bindnow, box64c h->needed->names[j++] = h->DynStrTab+h->delta+h->Dynamic[i].d_un.d_val; // TODO: Add LD_LIBRARY_PATH and RPATH handling - if(AddNeededLib(maplib, local, bindnow, h->needed, box64, emu)) { + if(AddNeededLib(maplib, local, bindnow, h->needed, h, box64, emu)) { printf_log(LOG_INFO, "Error loading one of needed lib\n"); if(!allow_missing_libs) return 1; //error... -- cgit 1.4.1