def run_solidity_analysis(inputs): results = {} exit_code = 0 num = 0 for inp in inputs: logging.info("contract %s:", inp['contract']) with open(inp['disasm_file'], 'r') as f: lines = f.readlines() last_line = lines[-1] num = num + int(last_line.split(":")[0]) logging.info("the total number:") logging.info(num) for inp in inputs: logging.info("contract %s:", inp['contract']) result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source']) try: c_source = inp['c_source'] c_name = inp['c_name'] results[c_source][c_name] = result except: results[c_source] = {c_name: result} if return_code == 1: exit_code = 1 return results, exit_code
def analyze_bytecode(): global args x = dtimer() helper = InputHelper(InputHelper.BYTECODE, source=args.source,evm = args.evm) inp = helper.get_inputs()[0] y = dtimer() print("*************************************************************") print("Compilation time: "+str(y-x)+"s") print("*************************************************************") r = check_c_translation_dependencies() if r: svc_options={} if args.verify: svc_options["verify"]=args.verify if args.invalid: svc_options["invalid"]=args.invalid result, exit_code = symExec.run(disasm_file=inp['disasm_file'],cfg = args.control_flow_graph,saco = args.saco,debug = args.debug,evm_version = evm_version_modifications,cfile = args.cfile,svc=svc_options,go = args.goto) helper.rm_tmp_files() else: exit_code = -1 print("Option Error: --verify option is only applied to c translation.\n") if global_params.WEB: six.print_(json.dumps(result)) return exit_code
def analyze_disasm_bytecode(): global args r = check_c_translation_dependencies() if r: svc_options = {} if args.verify: svc_options["verify"] = args.verify if args.invalid: svc_options["invalid"] = args.invalid result, exit_code = symExec.run(disasm_file=args.source, cfg=args.control_flow_graph, saco=args.saco, debug=args.debug, evm_version=evm_version_modifications, cfile=args.cfile, svc=svc_options, go=args.goto) else: exit_code = -1 print( "Option Error: --verify, --goto or --invalid options are only applied to c translation.\n" ) if global_params.WEB: six.print_(json.dumps(result)) return exit_code
def run_solidity_analysis_optimized(inp, hashes): results = {} exit_code = 0 opt_info = {} svc_opt = {} opt_info["block"] = args.block fields = process_fields(inp['source_map']) opt_info["fields"] = fields opt_info["c_source"] = inp['c_source'].split("/")[-1] # print fields # print opt_info["c_source"] function_names = hashes[inp["c_name"]] try: result, return_code = symExec.run( disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source'], cfg=args.control_flow_graph, saco=args.saco, execution=0, cname=inp["c_name"], hashes=function_names, debug=args.debug, evm_version=evm_version_modifications, cfile=args.cfile, svc=svc_opt, go=args.goto, opt=opt_info) try: c_source = inp['c_source'] c_name = inp['c_name'] results[c_source][c_name] = result except: results[c_source] = {c_name: result} except Exception as e: traceback.print_exc() if len(e.args) > 1: return_code = e.args[1] else: return_code = 1 result = [] #return_code = -1 print("\n Exception: " + str(return_code) + "\n") exit_code = return_code return results, exit_code
def run_solidity_analysis(inputs, hashes): results = {} exit_code = 0 i = 0 if len(inputs) == 1: inp = inputs[0] function_names = hashes[inp["c_name"]] result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source'], cfg=args.control_flow_graph, nop=args.evm_opcodes, saco=args.saco, execution=0, cname=inp["c_name"], hashes=function_names) if return_code == 1: exit_code = 1 else: for inp in inputs: #print hashes[inp["c_name"]] function_names = hashes[inp["c_name"]] #logging.info("contract %s:", inp['contract']) result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source'], cfg=args.control_flow_graph, nop=args.evm_opcodes, saco=args.saco, execution=i, cname=inp["c_name"], hashes=function_names) i += 1 try: c_source = inp['c_source'] c_name = inp['c_name'] results[c_source][c_name] = result except: results[c_source] = {c_name: result} if return_code == 1: exit_code = 1 return results, exit_code
def analyze_bytecode(): global args helper = InputHelper(InputHelper.BYTECODE, source=args.source) inp = helper.get_inputs()[0] result, exit_code = symExec.run(disasm_file=inp['disasm_file']) helper.rm_tmp_files() return exit_code
def analyze_disasm_bytecode(): global args result, exit_code = symExec.run(disasm_file=args.source, cfg=args.control_flow_graph, nop=args.evm_opcodes, saco=args.saco) if global_params.WEB: six.print_(json.dumps(result)) return exit_code
def analyze_bytecode(): global args helper = InputHelper(InputHelper.BYTECODE, source=args.source) inp = helper.get_inputs()[0] result, exit_code = symExec.run(disasm_file=inp['disasm_file']) helper.rm_tmp_files() if global_params.WEB: six.print_(json.dumps(result)) return exit_code
def analyze_bytecode(): global args helper = InputHelper(InputHelper.BYTECODE, source=args.source,evm=args.evm) inp = helper.get_inputs()[0] result, exit_code = symExec.run(disasm_file=inp['disasm_file']) helper.rm_tmp_files() if global_params.WEB: six.print_(json.dumps(result)) return exit_code
def run_solidity_analysis(inputs): results = {} exit_code = 0 for inp in inputs: logging.info("contract %s:", inp['contract']) result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source']) try: c_source = inp['c_source'] c_name = inp['c_name'] results[c_source][c_name] = result except: results[c_source] = {c_name: result} if return_code == 1: exit_code = 1 return results, exit_code
def analyze_bytecode(): global args x = dtimer() helper = InputHelper(InputHelper.BYTECODE, source=args.source, evm=args.evm) inp = helper.get_inputs()[0] y = dtimer() print("Compilation time: " + str(y - x) + "s") result, exit_code = symExec.run(disasm_file=inp['disasm_file'], cfg=args.control_flow_graph, nop=args.evm_opcodes, saco=args.saco) helper.rm_tmp_files() if global_params.WEB: six.print_(json.dumps(result)) return exit_code
def run_solidity_analysis(inputs,hashes): results = {} exit_code = 0 returns = [] i = 0 r = check_c_translation_dependencies() svc_options={} if args.verify: svc_options["verify"]=args.verify if args.invalid: svc_options["invalid"]=args.invalid if len(inputs) == 1 and r: inp = inputs[0] function_names = hashes[inp["c_name"]] # result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source'],cfg = args.control_flow_graph,saco = args.saco,execution = 0, cname = inp["c_name"],hashes = function_names,debug = args.debug,evm_version = evm_version_modifications,cfile = args.cfile,svc=svc_options,go = args.goto) try: result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source'],cfg = args.control_flow_graph,saco = args.saco,execution = 0, cname = inp["c_name"],hashes = function_names,debug = args.debug,evm_version = evm_version_modifications,cfile = args.cfile,svc=svc_options,go = args.goto) except Exception as e: #traceback.print_exc() if len(e.args)>1: return_code = e.args[1] else: return_code = 1 result = [] #return_code = -1 print ("\n Exception: "+str(return_code)+"\n") exit_code = return_code elif len(inputs)>1 and r: for inp in inputs: #print hashes[inp["c_name"]] function_names = hashes[inp["c_name"]] #logging.info("contract %s:", inp['contract']) try: result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source'],cfg = args.control_flow_graph,saco = args.saco,execution = i,cname = inp["c_name"],hashes = function_names,debug = args.debug,t_exs = args.source,evm_version = evm_version_modifications,cfile = args.cfile,svc=svc_options,go = args.goto) except Exception as e: #traceback.print_exc() if len(e.args)>1: return_code = e.args[1] else: return_code = 1 result = [] # return_code = -1 print ("\n Exception: "+str(return_code)+"\n") # result, return_code = symExec.run(disasm_file=inp['disasm_file'], source_map=inp['source_map'], source_file=inp['source'],cfg = args.control_flow_graph,saco = args.saco,execution = i,cname = inp["c_name"],hashes = function_names,debug = args.debug,t_exs = args.source,evm_version = evm_version_modifications,cfile = args.cfile,svc=svc_options,go = args.goto) i+=1 returns.append(return_code) try: c_source = inp['c_source'] c_name = inp['c_name'] results[c_source][c_name] = result except: results[c_source] = {c_name: result} if return_code == 1: exit_code = 1 else: exit_code = 1 print("Option Error: --verify option is only applied to c translation. Use -c flag\n") ''' Exception management: 1- Oyente Error 2- Oyente TimeOut 3- Cloning Error 4- RBR generation Error 5- SACO Error 6- C Error ''' if (1 in returns): exit_code = 1 elif (2 in returns): exit_code = 2 elif (3 in returns): exit_code = 3 elif (7 in returns): exit_code = 7 elif (4 in returns): exit_code = 4 elif (5 in returns): exit_code = 5 elif (6 in returns): exit_code = 6 # print exit_code return results, exit_code