def do_fscope(self, line): ''' The fscope command can be used to enumerate things from the scope of one function and down it's calling graph. Usage: fscope [options] <func_addr_expr> -I - Show import calls from this function scope -S - Show strings from this function scope Example: fscope -I kernel32.CreateFileW (Show imports called by CreateFileW and down...) ''' showimp = False showstr = False argv = e_cli.splitargs(line) try: opts, args = getopt(argv, 'IS') except Exception: return self.do_help('fscope') if not len(args) or not len(opts): return self.do_help('fscope') for opt, optarg in opts: if opt == '-I': showimp = True elif opt == '-S': showstr = True for expr in args: va = self.parseExpression(expr) if showimp: for callva, impname in v_t_fscope.getImportCalls(self, va): pstr = self.arch.pointerString(callva) self.canvas.addVaText(pstr, callva) # FIXME best name symbol etc? self.canvas.addText(' %s\n' % impname) if showstr: for refva, strva, strbytes in v_t_fscope.getStringRefs( self, va): pstr = self.arch.pointerString(refva) self.canvas.addVaText(pstr, refva) self.canvas.addText(' ') self.canvas.addVaText(strbytes, strva) self.canvas.addText('\n')
def do_fscope(self, line): ''' The fscope command can be used to enumerate things from the scope of one function and down it's calling graph. Usage: fscope [options] <func_addr_expr> -I - Show import calls from this function scope -S - Show strings from this function scope Example: fscope -I kernel32.CreateFileW (Show imports called by CreateFileW and down...) ''' showimp = False showstr = False argv = e_cli.splitargs(line) try: opts,args = getopt(argv, 'IS') except Exception as e: return self.do_help('fscope') if not len(args) or not len(opts): return self.do_help('fscope') for opt,optarg in opts: if opt == '-I': showimp = True elif opt == '-S': showstr = True for expr in args: va = self.parseExpression(expr) if showimp: for callva, impname in v_t_fscope.getImportCalls(self, va): pstr = self.arch.pointerString(callva) self.canvas.addVaText(pstr, callva) # FIXME best name symbol etc? self.canvas.addText(' %s\n' % impname) if showstr: for refva, strva, strbytes in v_t_fscope.getStringRefs(self, va): pstr = self.arch.pointerString(refva) self.canvas.addVaText(pstr, refva) self.canvas.addText(' ') self.canvas.addVaText(strbytes, strva) self.canvas.addText('\n')
elif opt == '-S': showstr = True for expr in args: va = self.parseExpression(expr) if showimp: for callva, impname in v_t_fscope.getImportCalls(self, va): pstr = self.arch.pointerString(callva) self.canvas.addVaText(pstr, callva) # FIXME best name symbol etc? self.canvas.addText(' %s\n' % impname) if showstr: for refva, strva, strbytes in v_t_fscope.getStringRefs(self, va): pstr = self.arch.pointerString(refva) self.canvas.addVaText(pstr, refva) self.canvas.addText(' ') self.canvas.addVaText(strbytes, strva) self.canvas.addText('\n') def do_exports(self, line): """ List the exports in the workspace (or in a specific file). Usage: exports [fname] """ edict = {} for va, etype, name, filename in self.getExports(): l = edict.get(filename)