@@ -412,6 +412,7 @@ def analyzecmd(args: argparse.Namespace) -> NoReturn:
412412 fns_exclude : List [str ] = args .fns_exclude # function hex addresses
413413 fns_include : List [str ] = args .fns_include # function hex addresses
414414 analyze_all_named : bool = args .analyze_all_named
415+ analyze_range_entry_points : List [str ] = args .analyze_range_entry_points
415416 gc_compact : int = args .gc_compact
416417 construct_all_functions : bool = args .construct_all_functions
417418 show_function_timing : bool = args .show_function_timing
@@ -492,7 +493,21 @@ def analyzecmd(args: argparse.Namespace) -> NoReturn:
492493 if analyze_all_named :
493494 fnnamed_addrs = userhints .rev_function_names ().values ()
494495 fns_include = fns_include + list (fnnamed_addrs )
495- chklogger .logger .warning ("Include %d functions" , len (fns_include ))
496+ chklogger .logger .info ("Include %d functions" , len (fns_include ))
497+
498+ if len (analyze_range_entry_points ) == 2 :
499+ festart = int (analyze_range_entry_points [0 ], 16 )
500+ fefin = int (analyze_range_entry_points [1 ], 16 )
501+ fentrypoints = userhints .function_entry_points ()
502+ feincludes : List [str ] = []
503+ for fe in fentrypoints :
504+ eint = int (fe , 16 )
505+ if eint >= festart and eint <= fefin :
506+ feincludes .append (fe )
507+ fns_include = fns_include + feincludes
508+ chklogger .logger .info (
509+ "Include %d entry point functions in range %s - %s" ,
510+ len (feincludes ), hex (festart ), hex (fefin ))
496511
497512 am = AnalysisManager (
498513 path ,
@@ -2448,3 +2463,36 @@ def ddata_gvars(args: argparse.Namespace) -> NoReturn:
24482463 print ("Coverage: " + str (coverage ) + " (typed: " + str (count ) + ")" )
24492464
24502465 exit (0 )
2466+
2467+
2468+ def ddata_md5s (args : argparse .Namespace ) -> NoReturn :
2469+
2470+ # arguments
2471+ xname : str = str (args .xname )
2472+
2473+ try :
2474+ (path , xfile ) = get_path_filename (xname )
2475+ except UF .CHBError as e :
2476+ print (str (e .wrap ()))
2477+ exit (1 )
2478+
2479+ xinfo = XI .XInfo ()
2480+ xinfo .load (path , xfile )
2481+
2482+ app = get_app (path , xfile , xinfo )
2483+ md5s = app .function_md5s
2484+
2485+ result : Dict [str , int ] = {}
2486+
2487+ for md5 in md5s .values ():
2488+ result .setdefault (md5 , 0 )
2489+ result [md5 ] += 1
2490+
2491+ print ("Number of functions: " + str (len (md5s )))
2492+ print ("Distinct md5s : " + str (len (result )))
2493+
2494+ for (md5 , count ) in result .items ():
2495+ if count > 10 :
2496+ print (md5 + ": " + str (count ))
2497+
2498+ exit (0 )
0 commit comments