def PopulateModel(self, trace): self.CleanModel() w = NotifyProgress() w.show() ctr = 0 max = len(trace) for line in trace: assert isinstance(line, Traceline) tid = QtGui.QStandardItem('%s' % line.thread_id) addr = QtGui.QStandardItem('%x' % line.addr) disasm = QtGui.QStandardItem(line.disasm_str()) comment = QtGui.QStandardItem(''.join(c for c in line.comment if line.comment is not None)) context = QtGui.QStandardItem(''.join('%s:%s ' % (c, line.ctx[c]) for c in line.ctx.keys() if line.ctx is not None)) ctr += 1 w.pbar_set(int(float(ctr) / float(max) * 100)) self.sim.appendRow([tid, addr, disasm, comment, context]) w.close() self.treeView.resizeColumnToContents(0) self.treeView.resizeColumnToContents(1) self.treeView.resizeColumnToContents(2) self.treeView.resizeColumnToContents(3) self.treeView.resizeColumnToContents(4)
def PopulateModel(self): for key in self.sorted: sa = QtGui.QStandardItem('%s' % key) chg = QtGui.QStandardItem('%s' % self.stack_changes[key]) if key in self.vr.values(): reg = QtGui.QStandardItem( '%s' % [k for k in self.vr.keys() if self.vr[k] == key][0]) else: reg = QtGui.QStandardItem(' ') self.sim.appendRow([sa, reg, chg]) self.treeView.resizeColumnToContents(0) self.treeView.resizeColumnToContents(1) self.treeView.resizeColumnToContents(2)
def PopulateModel(self): self.CleanModel() assert isinstance(self.ctx, dict) for key in self.ctx.keys(): if get_reg_class(key) is not None: node = QtGui.QStandardItem('Register %s' % key) node_brush = set() for line in self.ctx[key]: assert isinstance(line, Traceline) tid = QtGui.QStandardItem('%s' % line.thread_id) addr = QtGui.QStandardItem('%x' % line.addr) disasm = QtGui.QStandardItem(line.disasm_str()) comment = QtGui.QStandardItem(''.join( c for c in line.comment if line.comment is not None)) context = QtGui.QStandardItem(''.join( '%s:%s ' % (c, line.ctx[c]) for c in line.ctx.keys() if line.ctx is not None)) ci = 0 co = 0 for selector in self.selection[ 'upper']: # check input values if line.to_str_line().__contains__( selector) or line.to_str_line().__contains__( selector.lower()): ci = 1 for selector in self.selection[ 'lower']: # check output values if line.to_str_line().__contains__( selector) or line.to_str_line().__contains__( selector.lower()): co = 2 node_brush.add(ci + co) tid.setBackground(self.brush_map[ci + co]) addr.setBackground(self.brush_map[ci + co]) disasm.setBackground(self.brush_map[ci + co]) comment.setBackground(self.brush_map[ci + co]) context.setBackground(self.brush_map[ci + co]) node.appendRow([tid, addr, disasm, comment, context]) try: if len(node_brush) == 3: color = 3 else: color = max(node_brush) node.setBackground(self.brush_map[color]) except: pass self.sim.appendRow(node) self.treeView.resizeColumnToContents(0) self.treeView.resizeColumnToContents(1) self.treeView.resizeColumnToContents(2) self.treeView.resizeColumnToContents(3) self.treeView.resizeColumnToContents(4)
def PopulateModel(self): self.Clean() vmr = get_vmr() w = NotifyProgress() w.show() ctr = 0 max = len(self.trace) # present clustering analysis in viewer prev_ctx = defaultdict(lambda: 0) for line in self.trace: ctr += 1 w.pbar_set(int(float(ctr) / float(max) * 100)) if isinstance(line, Traceline): tid = QtGui.QStandardItem('%s' % line.thread_id) addr = QtGui.QStandardItem('%x' % line.addr) disasm = QtGui.QStandardItem(line.disasm_str()) comment = QtGui.QStandardItem(''.join( c for c in line.comment if line.comment is not None)) context = QtGui.QStandardItem(''.join( '%s:%s ' % (c, line.ctx[c]) for c in line.ctx if line.ctx is not None)) prev_ctx = line.ctx self.sim.appendRow([tid, addr, disasm, comment, context]) else: cluster_node = QtGui.QStandardItem( 'Cluster %x-%x' % (line[0].addr, line[-1].addr)) self.sim.appendRow(cluster_node) if vmr.bb: cluster = line bbs = [] bb = [] # subdivide the clusters by basic blocks for line in cluster: assert isinstance(line, Traceline) if is_basic_block_end(line.addr): bb.append(line) bbs.append(bb) bb = [] else: bb.append(line) for bb in bbs: bb_sum = self.bb_func(bb, self.ctx_reg_size, prev_ctx) bb_node = QtGui.QStandardItem( 'BB%s Summary %x-%x: %s\t%s\t%s' % (bbs.index(bb), bb[0].addr, bb[-1].addr, ''.join( '%s ; ' % (''.join('%s, ' % c for c in line)) for line in bb_sum.disasm), ''.join( '%s, ' % c for c in filter(None, bb_sum.comment) if bb_sum.comment is not None), ''.join( '%s:%s ' % (c, bb_sum.ctx[c]) for c in bb_sum.ctx if bb_sum.ctx is not None))) for line in bb: tid = QtGui.QStandardItem('%s' % line.thread_id) addr = QtGui.QStandardItem('%x' % line.addr) disasm = QtGui.QStandardItem(line.disasm_str()) comment = QtGui.QStandardItem(''.join( c for c in line.comment if line.comment is not None)) context = QtGui.QStandardItem(''.join( '%s:%s ' % (c, line.ctx[c]) for c in line.ctx if line.ctx is not None)) bb_node.appendRow( [tid, addr, disasm, comment, context]) cluster_node.appendRow(bb_node) self.treeView.setFirstColumnSpanned( bbs.index(bb), cluster_node.index(), True) prev_ctx = bb[-1].ctx else: for l in line: tid = QtGui.QStandardItem('%s' % l.thread_id) addr = QtGui.QStandardItem('%x' % l.addr) disasm = QtGui.QStandardItem(l.disasm_str()) comment = QtGui.QStandardItem(''.join( c for c in l.comment if l.comment is not None)) context = QtGui.QStandardItem(''.join( '%s:%s ' % (c, l.ctx[c]) for c in l.ctx if l.ctx is not None)) cluster_node.appendRow( [tid, addr, disasm, comment, context]) w.close() self.treeView.resizeColumnToContents(0) self.treeView.resizeColumnToContents(1) self.treeView.resizeColumnToContents(2) self.treeView.resizeColumnToContents(3) self.treeView.resizeColumnToContents(4)
def PopulateModel(self, threshold): self.CleanModel() w = NotifyProgress() ctr = 0 max = len(self.trace) prev = None for line in self.trace: assert isinstance(line, Traceline) if line.grade >= threshold: if prev is not None and threshold > 2: grade = QtGui.QStandardItem(' ') tid = QtGui.QStandardItem(' ') addr = QtGui.QStandardItem(' ') disasm = QtGui.QStandardItem('previous CPU context:') comment = QtGui.QStandardItem(' ') context = QtGui.QStandardItem(''.join( '%s:%s ' % (c, prev.ctx[c]) for c in prev.ctx.keys() if prev.ctx is not None)) self.sim.appendRow( [grade, tid, addr, disasm, comment, context]) grade = QtGui.QStandardItem('%s' % line.grade) tid = QtGui.QStandardItem('%s' % line.thread_id) addr = QtGui.QStandardItem('%x' % line.addr) disasm = QtGui.QStandardItem(line.disasm_str()) comment = QtGui.QStandardItem(''.join( c for c in line.comment if line.comment is not None)) context = QtGui.QStandardItem(''.join( '%s:%s ' % (c, line.ctx[c]) for c in line.ctx.keys() if line.ctx is not None)) self.sim.appendRow( [grade, tid, addr, disasm, comment, context]) ctr += 1 w.pbar_set(int(float(ctr) / float(max) * 100)) prev = line w.close() self.treeView.resizeColumnToContents(0) self.treeView.resizeColumnToContents(1) self.treeView.resizeColumnToContents(2) self.treeView.resizeColumnToContents(3) self.treeView.resizeColumnToContents(4) self.treeView.resizeColumnToContents(5)