def _ConvertFromOffset(self): offset = self._offset.GetValue() if not offset: offset = 0 else: offset = int(offset, 16) try: if not offset < self._pe.sections[0].PointerToRawData: rva = self._pe.get_rva_from_offset(offset) else: rva = offset va = rva + self._pe.OPTIONAL_HEADER.ImageBase idx = pedata.guess_section_from_rva(self._pe, rva) if idx == -1: section = "HEADER" else: section = self._pe.sections[idx].Name bytes = get_hex_bytes(self._pe.get_data(rva, 16)) self.PrintDataInCtrls(rva, va, offset, section, bytes) except Exception, e: self._ShowError(e)
def _ConvertFromRVA(self): rva = self._rva.GetValue() if not rva: rva = 0 else: rva = int(rva, 16) try: offset = pedata.fromRvaToOffset(self._pe, rva) va = rva + self._pe.OPTIONAL_HEADER.ImageBase idx = pedata.guess_section_from_rva(self._pe, rva) if idx == -1: section = "Header" else: section = self._pe.sections[idx].Name bytes = get_hex_bytes(self._pe.get_data(rva, 16)) self.PrintDataInCtrls(rva, va, offset, section, bytes) except Exception, e: #import traceback #traceback.print_exc() self._ShowError(e)
def loadRelocsInfo(self): reloc_dir = pedata.getRelocDirectory(self.__pe) block_index = 1 for entry in reloc_dir: index = self.Blocks.InsertStringItem(sys.maxint, str(block_index)) entry_rva = entry.struct.VirtualAddress entry_size_of_block = entry.struct.SizeOfBlock entry_len = len(entry.entries) entry_section = self.__pe.sections[pedata.guess_section_from_rva(self.__pe, entry_rva)].Name self.Blocks.SetStringItem(index, 0, str(block_index)) self.Blocks.SetStringItem(index, 1, entry_section) self.Blocks.SetStringItem(index, 2, hex_up(entry_rva)) self.Blocks.SetStringItem(index, 3, hex_up(entry_size_of_block, 4)) self.Blocks.SetStringItem(index, 4, "%sh / %sd" % (hex_up(len(entry.entries), 4), len(entry.entries))) block_index += 1
def _ConvertFromVA(self): va = self._va.GetValue() if not va: va = 0 else: va = int(va, 16) try: rva = va - self._pe.OPTIONAL_HEADER.ImageBase offset = pedata.fromRvaToOffset(self._pe, rva) idx = pedata.guess_section_from_rva(self._pe, rva) if idx == -1: section = "HEADER" else: section = self._pe.sections[idx].Name bytes = get_hex_bytes(self._pe.get_data(rva, 16)) self.PrintDataInCtrls(rva, va, offset, section, bytes) except Exception, e: self._ShowError(e)
def loadRelocsInfo(self): reloc_dir = pedata.getRelocDirectory(self.__pe) block_index = 1 for entry in reloc_dir: index = self.Blocks.InsertStringItem(sys.maxint, str(block_index)) entry_rva = entry.struct.VirtualAddress entry_size_of_block = entry.struct.SizeOfBlock entry_len = len(entry.entries) entry_section = self.__pe.sections[pedata.guess_section_from_rva( self.__pe, entry_rva)].Name self.Blocks.SetStringItem(index, 0, str(block_index)) self.Blocks.SetStringItem(index, 1, entry_section) self.Blocks.SetStringItem(index, 2, hex_up(entry_rva)) self.Blocks.SetStringItem(index, 3, hex_up(entry_size_of_block, 4)) self.Blocks.SetStringItem( index, 4, "%sh / %sd" % (hex_up(len(entry.entries), 4), len(entry.entries))) block_index += 1