@@ -2530,6 +2530,52 @@ def ddata_gvars(args: argparse.Namespace) -> NoReturn:
25302530 exit (0 )
25312531
25322532
2533+ def ddata_userdata (args : argparse .Namespace ) -> NoReturn :
2534+
2535+ # arguments
2536+ xname : str = str (args .xname )
2537+ xoutput : str = str (args .output )
2538+
2539+ try :
2540+ (path , xfile ) = get_path_filename (xname )
2541+ except UF .CHBError as e :
2542+ print (str (e .wrap ()))
2543+ exit (1 )
2544+
2545+ xinfo = XI .XInfo ()
2546+ xinfo .load (path , xfile )
2547+
2548+ app = get_app (path , xfile , xinfo )
2549+
2550+ result : Dict [str , Dict [str , Dict [str , str ]]] = {}
2551+ userdata = result ["userdata" ] = {}
2552+ fnnames = userdata ["function-names" ] = {}
2553+ symaddrs = userdata ["symbolic-addresses" ] = {}
2554+
2555+ functionsdata = app .systeminfo .functionsdata .functions
2556+ for (faddr , fdata ) in sorted (functionsdata .items (), key = lambda t : int (t [0 ], 16 )):
2557+ if fdata .has_name ():
2558+ fnnames [faddr ] = fdata .name
2559+
2560+ memmap = app .globalmemorymap
2561+ glocs = memmap .locations
2562+ for gaddr in sorted (glocs , key = lambda g : int (g , 16 )):
2563+ gloc = glocs [gaddr ]
2564+ if gloc .gtype is not None :
2565+ symaddrs [gaddr ] = gloc .name
2566+
2567+ with open (xoutput , "w" ) as fp :
2568+ json .dump (result , fp , indent = 4 )
2569+
2570+ print ("\n Saved userdata with "
2571+ + str (len (fnnames ))
2572+ + " function names and "
2573+ + str (len (symaddrs ))
2574+ + " symbolic addresses" )
2575+
2576+ exit (0 )
2577+
2578+
25332579def ddata_md5s (args : argparse .Namespace ) -> NoReturn :
25342580
25352581 # arguments
0 commit comments