Bug in handling DT_GNU_HASH table.
Fix includes a more-general and stronger heuristic to find the end of GNU_HASH table when there is no ElfXX_Shdr for it. 64-bit only for now. (This is needed to help prevent SIGSEGV when processing tampered .exe.) https://github.com/upx/upx/issues/577 modified: p_elf_enum.h modified: p_lx_elf.cpp modified: p_lx_elf.h
This commit is contained in:
committed by
Markus F.X.J. Oberhumer
parent
4ae75375e0
commit
03436d2415
+4
-4
@@ -190,8 +190,8 @@ protected:
|
||||
unsigned page_mask; // AND clears the offset-within-page
|
||||
|
||||
Elf32_Dyn const *dynseg; // from PT_DYNAMIC
|
||||
unsigned int const *hashtab; // from DT_HASH
|
||||
unsigned int const *gashtab; // from DT_GNU_HASH
|
||||
unsigned int const *hashtab, *hashend; // from DT_HASH
|
||||
unsigned int const *gashtab, *gashend; // from DT_GNU_HASH
|
||||
Elf32_Sym const *dynsym; // from DT_SYMTAB
|
||||
Elf32_Sym const *jni_onload_sym;
|
||||
|
||||
@@ -342,8 +342,8 @@ protected:
|
||||
upx_uint64_t page_mask; // AND clears the offset-within-page
|
||||
|
||||
Elf64_Dyn const *dynseg; // from PT_DYNAMIC
|
||||
unsigned int const *hashtab; // from DT_HASH
|
||||
unsigned int const *gashtab; // from DT_GNU_HASH
|
||||
unsigned int const *hashtab, *hashend; // from DT_HASH
|
||||
unsigned int const *gashtab, *gashend; // from DT_GNU_HASH
|
||||
Elf64_Sym const *dynsym; // from DT_SYMTAB
|
||||
Elf64_Sym const *jni_onload_sym;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user