def _do_argtrack(self, line): #FIXME: this is currently broken and needs to be revamped to use # apiCall and VivTaints """ Track input arguments to the given function by name or address. (this is currently broken. sorry!) Usage: argtrack <func_addr_expr> <arg_idx> """ if not line: return self.do_help("argtrack") argv = e_cli.splitargs(line) if len(argv) != 2: return self.do_help("argtrack") try: fva = self.parseExpression(argv[0]) except Exception: self.vprint("Invalid Address Expression: %s" % argv[0]) return try: idx = self.parseExpression(argv[1]) except Exception: self.vprint("Invalid Index Expression: %s" % argv[1]) return if self.getFunction(fva) != fva: self.vprint("Invalid Function Address: (0x%.8x) %s" % (fva, line)) for pleaf in viv_vector.trackArgOrigin(self, fva, idx): self.vprint('=' * 80) path = vg_path.getPathToNode(pleaf) path.reverse() for pnode in path: fva = vg_path.getNodeProp(pnode, 'fva') argv = vg_path.getNodeProp(pnode, 'argv') callva = vg_path.getNodeProp(pnode, 'cva') argidx = vg_path.getNodeProp(pnode, 'argidx') if callva is not None: aval, amagic = argv[argidx] arepr = '0x%.8x' % aval if amagic is not None: arepr = repr(amagic) frepr = 'UNKNOWN' if fva is not None: frepr = '0x%.8x' % fva self.vprint('func: %s calls at: 0x%.8x with his own: %s' % (frepr, callva, arepr)) self.vprint("=" * 80)
def do_argtrack(self, line): """ Track input arguments to the given function by name or address. Usage: argtrack <func_addr_expr> <arg_idx> """ if not line: return self.do_help("argtrack") argv = e_cli.splitargs(line) if len(argv) != 2: return self.do_help("argtrack") try: fva = self.parseExpression(argv[0]) except Exception as e: self.vprint("Invalid Address Expression: %s" % argv[0]) return try: idx = self.parseExpression(argv[1]) except Exception as e: self.vprint("Invalid Index Expression: %s" % argv[1]) return if self.getFunction(fva) != fva: self.vprint("Invalid Function Address: (0x%.8x) %s" % (fva, line)) for pleaf in viv_vector.trackArgOrigin(self, fva, idx): self.vprint('='*80) path = vg_path.getPathToNode(pleaf) path.reverse() for pnode in path: fva = vg_path.getNodeProp(pnode, 'fva') argv = vg_path.getNodeProp(pnode, 'argv') callva = vg_path.getNodeProp(pnode, 'cva') argidx = vg_path.getNodeProp(pnode, 'argidx') if callva != None: aval, amagic = argv[argidx] arepr = '0x%.8x' % aval if amagic != None: arepr = repr(amagic) frepr = 'UNKNOWN' if fva != None: frepr = '0x%.8x' % fva self.vprint('func: %s calls at: 0x%.8x with his own: %s' % (frepr, callva, arepr)) self.vprint("="*80)
try: fva = self.parseExpression(argv[0]) except Exception, e: self.vprint("Invalid Address Expression: %s" % argv[0]) return try: idx = self.parseExpression(argv[1]) except Exception, e: self.vprint("Invalid Index Expression: %s" % argv[1]) return if self.getFunction(fva) != fva: self.vprint("Invalid Function Address: (0x%.8x) %s" % (fva, line)) for pleaf in viv_vector.trackArgOrigin(self, fva, idx): self.vprint('='*80) path = vg_path.getPathToNode(pleaf) path.reverse() for pnode in path: fva = vg_path.getNodeProp(pnode, 'fva') argv = vg_path.getNodeProp(pnode, 'argv') callva = vg_path.getNodeProp(pnode, 'cva') argidx = vg_path.getNodeProp(pnode, 'argidx') if callva != None: aval, amagic = argv[argidx] arepr = '0x%.8x' % aval if amagic != None: