def _set_memory_view(self): self.view = VIEW_HEX self.setRowCount(0) self.setColumnCount(18) s_row = -1 s_col = 0 for r in hexdump(self.data['data'], result='return').split('\n'): row = self.rowCount() self.insertRow(row) rr = r.split(':') offset = int(rr[0], 16) + self.data['start'] w = NotEditableTableWidgetItem(hex(offset)) w.setForeground(Qt.red) self.setItem(row, 0, w) rr = rr[1].split(' ') hex_line = rr[0][1:] + ' ' + rr[1] hex_line = hex_line.split(' ') for i in range(0, len(hex_line)): qq = ByteWidget(hex_line[i]) qq.set_value(int(hex_line[i], 16)) qq.set_ptr(offset + i) self.setItem(row, i + 1, qq) if -1 < self.data['jt'] == offset + i: qq.setSelected(True) s_row = row s_col = i + 1 self.setItem(row, 17, NotEditableTableWidgetItem(rr[2])) if s_row > -1: self.setCurrentCell(s_row, 0) index = self.currentIndex() self.scrollTo(index, QAbstractItemView.PositionAtCenter) self.setCurrentCell(s_row, s_col) self.horizontalHeader().show() h_labels = [''] for i in range(0, 16): h_labels.append(hex(i)) h_labels.append('') self.setHorizontalHeaderLabels(h_labels) self.resizeColumnsToContents()
def _add_mem_address_item_if_needed(self, row): if not isinstance(self.memory_panel.item(row, 0), MemoryAddressWidget): address = self.memory_panel.range.base + (row * 16) q = MemoryAddressWidget(hex(address)) q.set_address(address) q.setFlags(Qt.NoItemFlags) q.setForeground(Qt.red) self.memory_panel.setItem(row, 0, q) col = 0 offset = address - self.memory_panel.range.base while col < 16: q = ByteWidget() if offset + col >= self.memory_panel.range.size: break try: q.set_value(self.memory_panel.range.data[offset + col]) except: self.work = False break q.set_ptr(address + col) q.set_offset(offset + col) self.memory_panel.setItem(row, col + 1, q) col += 1 tail = offset + 16 if tail > self.memory_panel.range.tail: tail = self.memory_panel.range.tail t = '' for byte in self.memory_panel.range.data[offset:tail]: if not PY3K: byte = ord(byte) if 0x20 <= byte <= 0x7E: t += chr(byte) else: t += '.' q = NotEditableTableWidgetItem(t) q.setFlags(Qt.NoItemFlags) q.setForeground(Qt.darkYellow) self.memory_panel.setItem(row, 17, q)