diff --git a/rpathtool.py b/rpathtool.py index 899541978..b5bfcf9ab 100755 --- a/rpathtool.py +++ b/rpathtool.py @@ -16,6 +16,8 @@ import sys, struct +SHT_STRTAB = 3 + class SectionHeader(): def __init__(self, ifile): #Elf64_Word @@ -35,7 +37,7 @@ class SectionHeader(): #Elf64_Word self.sh_info = struct.unpack('I', ifile.read(4))[0]; #Elf64_Xword - self.sh_addralign = struct.unpack('Q', ifile.read(4))[0]; + self.sh_addralign = struct.unpack('Q', ifile.read(8))[0]; #Elf64_Xword self.sh_entsize = struct.unpack('Q', ifile.read(8))[0]; @@ -69,15 +71,26 @@ class Elf(): self.bf.seek(self.e_shoff) self.sections = [] for i in range(self.e_shnum): - self.sections.append(self.bf) + self.sections.append(SectionHeader(self.bf)) -def remove_rpath(bfile): - elf = Elf(bfile) + def read_str(self): + arr = [] + x = self.bf.read(1) + while x != b'\0': + arr.append(x) + x = self.bf.read(1) + return b''.join(arr) + def print_section_names(self): + section_names = self.sections[self.e_shstrndx] + for i in self.sections: + self.bf.seek(section_names.sh_offset + i.sh_name) + name = self.read_str() + print(name.decode()) if __name__ == '__main__': if len(sys.argv) != 2: print('%s: ' % sys.argv[0]) exit(1) - bfile = sys.argv[1] - remove_rpath(bfile) + e = Elf(sys.argv[1]) + e.print_section_names()