X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fld-acess.so_src%2Felf.c;h=dc9dca36ca4b1ca6ea7b6fc34daf5f3f2ef79e32;hb=33de4e7776814ede6263b6563f5b8ff3ff20e33e;hp=92237eaa3d487c1995c0478e0b46225f1c7a9c8c;hpb=700d4228ad14b3a7406eefc9a58735748c254d42;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/ld-acess.so_src/elf.c b/Usermode/Libraries/ld-acess.so_src/elf.c index 92237eaa..dc9dca36 100644 --- a/Usermode/Libraries/ld-acess.so_src/elf.c +++ b/Usermode/Libraries/ld-acess.so_src/elf.c @@ -528,7 +528,7 @@ void *Elf64Relocate(void *Base, char **envp, const char *Filename) int i; Elf64_Ehdr *hdr = Base; Elf64_Phdr *phtab; - Elf64_Dyn *dyntab; + Elf64_Dyn *dyntab = NULL; Elf64_Addr compiledBase = -1, baseDiff; Elf64_Sym *symtab = NULL; char *strtab = NULL; @@ -554,7 +554,7 @@ void *Elf64Relocate(void *Base, char **envp, const char *Filename) DEBUGS("Elf64Relocate: e_phnum = %i", hdr->e_phnum); // Scan for the dynamic table (and find the compiled base) - phtab = Base + hdr->e_phoff; + phtab = (void*)((uintptr_t)Base + (uintptr_t)hdr->e_phoff); for( i = 0; i < hdr->e_phnum; i ++ ) { if(phtab[i].p_type == PT_DYNAMIC) @@ -677,8 +677,8 @@ void *Elf64Relocate(void *Base, char **envp, const char *Filename) break; case R_X86_64_COPY: { size_t size; - void *sym = GetSymbol(symname, &size); - memcpy(ptr, sym, size); + void *symptr = GetSymbol(symname, &size); + memcpy(ptr, symptr, size); } break; case R_X86_64_GLOB_DAT: *(uint64_t*)ptr = (uintptr_t)GetSymbol(symname, NULL); @@ -771,7 +771,7 @@ int Elf64GetSymbol(void *Base, const char *Name, void **Ret, size_t *Size) int j; // Locate the tables - phtab = (void*)( (intptr_t)Base + hdr->e_phoff ); + phtab = (void*)( (intptr_t)Base + (uintptr_t)hdr->e_phoff ); for( i = 0; i < hdr->e_phnum; i ++ ) { if(phtab[i].p_type == PT_LOAD && iBaseDiff > phtab[i].p_vaddr)