def pc_writes_info(self, pc): fields = ['pc', 'thumb', 'reg0', 'reg1', 'reg2', 'reg3', 'reg4', 'writesize', 'halt'] return {f: r[f] for f in fields for r in pytable_utils.query(self._sdb.db.writestable, "pc == 0x%x" % pc)}
def disasm_and_src_from_pc(self, pc): r = pytable_utils.query( self._sdb.db.srcstable, "(addrlo == 0x%x) & (addrhi == 0x%x)" % (utils.addr_lo(long(pc)), utils.addr_hi(long(pc)))) r = next(r) return (r["disasm"], r["src"])
def pc_write_size(self, pc): res = pytable_utils.query(self._sdb.db.writestable, "pc == 0x%x" % pc) try: r = next(res) return r['writesize'] except: return 0
def stepper_write_info(self, pc): fields = self._sdb.db.writestable.colnames query = "(pclo == 0x%x) & (pchi == 0x%x)" % \ (utils.addr_lo(pc), utils.addr_hi(pc)) for r in pytable_utils.query(self._sdb.db.writestable, query): yield {f: r[f] for f in fields}
def index_to_trace_write(self, start, end=None): if end is None: end = start + 1 fields = self._tdb.db.writestable.colnames for r in pytable_utils.query( self._tdb.db.writestable, "(index >= %d) & (index < %d)" % (start, end)): yield {f: r[f] for f in fields}
def skip_info(self, pc): query = "(pclo == 0x%x) & (pchi == 0x%x)" % \ (utils.addr_lo(pc), utils.addr_hi(pc)) return [{ "resumepc": r["resumepc"], "thumb": r["thumb"] } for r in pytable_utils.query(self._sdb.db.skipstable, query)]
def pc_write_size(self, pc): res = pytable_utils.query( self._sdb.db.writestable, "(pclo == 0x%x) & (pchi == 0x%x)" % (utils.addr_lo(pc), utils.addr_hi(pc))) try: r = next(res) return r['writesize'] except: return 0
def get_substage_writes(self, substage): fields = self._tdb.db.writestable.colnames def writes_dict(r): d = {} for f in fields: d[f] = r[f] return d query = "substage == %s" % substage return [writes_dict(r) for r in pytable_utils.query(self._tdb.db.writestable, query)]
def src_write_info(self, pc): fields = self._sdb.db.srcstable.colnames def srcss_dict(r): d = {} for f in fields: d[f] = r[f] return d query = "addr == 0x%x" % pc return [srcs_dict(r) for r in pytable_utils.query(self._sdb.db.srcstable, query)]
def stepper_write_info(self, pc): fields = self._sdb.db.writestable.colnames def writes_dict(r): d = {} for f in fields: d[f] = r[f] return d query = "pc == 0x%x" % pc return [writes_dict(r) for r in pytable_utils.query(self._sdb.db.writestable, query)]
def pc_writes_info(self, pc): fields = [ 'pc', 'pclo', 'pchi', 'thumb', 'reg0', 'reg1', 'reg2', 'reg3', 'reg4', 'writesize', 'halt' ] return { f: r[f] for f in fields for r in pytable_utils.query( self._sdb.db.writestable, "(pclo == 0x%x) & (pchi == 0x%x)" % (utils.addr_lo(pc), utils.addr_hi(pc))) }
def skip_info(self, pc): query = "pc == 0x%x" % (pc) return [{"resumepc": r["resumepc"], "thumb": r["thumb"]} for r in pytable_utils.query(self._sdb.db.skipstable, query)]
def reloc_names_in_substage(self, substagenum): return [r['name'] for r in pytable_utils.query(self._pdb.db.substage_reloc_info_table, 'substagenum == %s' % substagenum)]
def get_substage_writes(self, substage): fields = self._tdb.db.writestable.colnames query = "substage == %s" % substage for r in pytable_utils.query(self._tdb.db.writestable, query): yield {f: r[f] for f in fields}
def callindex_to_fnname(self, idx): rs = pytable_utils.query(self._tdb.db.writestable, "callindex == %d" % idx) write = next(rs) return self.addr2functionname(write['relocatedpc'])
def func_at_addr(self, pc): for r in pytable_utils.query(self._sdb.db.funcstable, "(startaddr <= 0x%x) & (0x%x < endaddr)" % (pc, pc)): yield r['fname']
def disasm_and_src_from_pc(self, pc): r = pytable_utils.query(self._sdb.db.srcstable, "addr == 0x%x" % pc) r = next(r) return (r["disasm"], r["src"])
def symbol_names_with(self, substr): return [r['name'] for r in pytable_utils.query(self._pdb.db.var_table, "contains(name, \"%s\")" % substr)]