Esempio n. 1
0
    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()
Esempio n. 2
0
    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)