Lines Matching refs:self

65     def __init__(self, file_path, begin_offset=0):  argument
75 self._begin_offset = begin_offset
77 self._file = open(file_path, 'rb')
81 self._file_size = os.fstat(self._file.fileno()).st_size
83 self.Close()
87 e_ident = self._SeekRead(0, consts.EI_NIDENT)
101 self.Close()
105 self.bitness = 32
106 self.Elf_Addr = structs.Elf32_Addr
107 self.Elf_Off = structs.Elf32_Off
108 self.Elf_Half = structs.Elf32_Half
109 self.Elf_Word = structs.Elf32_Word
110 self.Elf_Sword = structs.Elf32_Sword
111 self.Elf_Ehdr = structs.Elf32_Ehdr
112 self.Elf_Shdr = structs.Elf32_Shdr
113 self.Elf_Dyn = structs.Elf32_Dyn
114 self.Elf_Sym = structs.Elf32_Sym
115 self.Elf_Rel = structs.Elf32_Rel
116 self.Elf_Rela = structs.Elf32_Rela
117 self.Elf_Phdr = structs.Elf32_Phdr
118 self.Elf_Nhdr = structs.Elf32_Nhdr
120 self.bitness = 64
121 self.Elf_Addr = structs.Elf64_Addr
122 self.Elf_Off = structs.Elf64_Off
123 self.Elf_Half = structs.Elf64_Half
124 self.Elf_Word = structs.Elf64_Word
125 self.Elf_Sword = structs.Elf64_Sword
126 self.Elf_Ehdr = structs.Elf64_Ehdr
127 self.Elf_Shdr = structs.Elf64_Shdr
128 self.Elf_Dyn = structs.Elf64_Dyn
129 self.Elf_Sym = structs.Elf64_Sym
130 self.Elf_Rel = structs.Elf64_Rel
131 self.Elf_Rela = structs.Elf64_Rela
132 self.Elf_Phdr = structs.Elf64_Phdr
133 self.Elf_Nhdr = structs.Elf64_Nhdr
136 self.Ehdr = self._SeekReadStruct(0, self.Elf_Ehdr)
137 shoff = self.Ehdr.e_shoff
138 shentsize = self.Ehdr.e_shentsize
139 self.Shdr = [self._SeekReadStruct(shoff + i * shentsize,
140 self.Elf_Shdr)
141 for i in range(self.Ehdr.e_shnum)]
143 self.Close()
146 def __del__(self): argument
148 self.Close()
150 def __enter__(self): argument
151 return self
153 def __exit__(self, exc_type, exc_value, traceback): argument
155 self.Close()
157 def Close(self): argument
159 if hasattr(self, "_file"):
160 self._file.close()
162 def _SeekRead(self, offset, read_size): argument
175 if offset + read_size > self._file_size:
178 self._file.seek(self._begin_offset + offset)
179 return self._file.read(read_size)
183 def _SeekRead8(self, offset): argument
185 return struct.unpack("B", self._SeekRead(offset, 1))[0]
187 def _SeekRead16(self, offset): argument
189 return struct.unpack("H", self._SeekRead(offset, 2))[0]
191 def _SeekRead32(self, offset): argument
193 return struct.unpack("I", self._SeekRead(offset, 4))[0]
195 def _SeekRead64(self, offset): argument
197 return struct.unpack("Q", self._SeekRead(offset, 8))[0]
199 def _SeekReadString(self, offset): argument
213 self._file.seek(self._begin_offset + offset)
216 buf = self._file.read(buf_size)
228 def _SeekReadStruct(self, offset, struct_type): argument
242 raw_bytes = self._SeekRead(offset, ctypes.sizeof(struct_type))
248 def GetString(self, strtab, offset): argument
261 return self._SeekReadString(strtab.sh_offset + offset)
263 def GetSectionName(self, sh): argument
275 strtab = self.Shdr[self.Ehdr.e_shstrndx]
276 return self.GetString(strtab, sh.sh_name)
278 def GetSectionsByName(self, name): argument
292 return (sh for sh in self.Shdr if name == self.GetSectionName(sh))
294 def GetSectionByName(self, name): argument
309 for sh in self.GetSectionsByName(name):
313 def GetDynamic(self, dynamic): argument
328 dyn = self._SeekReadStruct(off, self.Elf_Dyn)
334 def GetSymbol(self, symtab, idx): argument
348 return self._SeekReadStruct(off, self.Elf_Sym)
350 def GetSymbols(self, symtab): argument
363 return (self.GetSymbol(symtab, i) for i in range(num))
365 def GetRelocationSymbol(self, symtab, rel): argument
378 return self.GetSymbol(symtab, rel.GetSymbol())
380 def _CreateElfRel(self, offset, info): argument
390 elf_rel = self.Elf_Rel()
395 def _DecodeAndroidRelr(self, rel): argument
407 if self.bitness == 32:
409 seek_read_entry = self._SeekRead32
412 seek_read_entry = self._SeekRead64
420 yield self._CreateElfRel(relr_entry, 0)
426 yield self._CreateElfRel(rel_offset, 0)
429 def GetRelocation(self, rel, idx): argument
444 return self._SeekReadStruct(off, self.Elf_Rela)
445 return self._SeekReadStruct(off, self.Elf_Rel)
447 def GetRelocations(self, rel): argument
460 relocations = self._UnpackAndroidRela(rel)
462 return (self.Elf_Rel(r_offset=rela.r_offset, r_info=rela.r_info)
466 return self._DecodeAndroidRelr(rel)
469 return (self.GetRelocation(rel, i) for i in range(num))
471 def _UnpackAndroidRela(self, android_rela): argument
483 data = self._SeekRead(android_rela.sh_offset, android_rela.sh_size)
540 relocation = self.Elf_Rela(r_offset=offset,
546 def _LoadDynamicSection(self, dynamic): argument
562 for dyn in self.GetDynamic(dynamic):
574 strtab = next(sh for sh in self.Shdr if sh.sh_addr == strtab_addr)
577 dt_needed = [self.GetString(strtab, off) for off in dt_needed_offsets]
580 dt_runpath.extend(self.GetString(strtab, off).split(":"))
583 def IsExecutable(self): argument
585 return self.Ehdr.e_type == consts.ET_EXEC
587 def IsSharedObject(self): argument
589 return self.Ehdr.e_type == consts.ET_DYN
591 def HasAndroidIdent(self): argument
593 for sh in self.GetSectionsByName(".note.android.ident"):
594 nh = self._SeekReadStruct(sh.sh_offset, self.Elf_Nhdr)
595 name = self._SeekRead(sh.sh_offset + ctypes.sizeof(self.Elf_Nhdr),
601 def MatchCpuAbi(self, abi): argument
617 return self.Ehdr.e_machine == machine
620 def ListDependencies(self): argument
629 for sh in self.Shdr:
631 dynamic = self._LoadDynamicSection(sh)
636 def ListGlobalSymbols(self, include_weak=False, argument
652 symtab = self.GetSectionByName(symtab_name)
653 strtab = self.GetSectionByName(strtab_name)
662 for sym in self.GetSymbols(symtab):
671 sym_names.append(self.GetString(strtab, sym.st_name))
674 def ListGlobalDynamicSymbols(self, include_weak=False): argument
686 return self.ListGlobalSymbols(include_weak,
689 def GetProgramInterpreter(self): argument
696 for ph_index in range(self.Ehdr.e_phnum):
697 ph = self._SeekReadStruct(
698 self.Ehdr.e_phoff + ph_index * self.Ehdr.e_phentsize,
699 self.Elf_Phdr)
701 return self._SeekReadString(ph.p_offset)