Very quick fix to avoid STOP instructions to return random values (#792)

This commit is contained in:
ggrieco-tob
2018-03-07 14:57:59 -03:00
committed by GitHub
parent f4118f4f0f
commit fbf0823cb6

View File

@@ -1213,6 +1213,7 @@ class ManticoreEVM(Manticore):
signature = metadata.get_func_signature(function_id)
function_name, arguments = ABI.parse(signature, tx.data)
return_data = None
if tx.result == 'RETURN':
ret_types = metadata.get_func_return_types(function_id)
return_data = ABI.parse(ret_types, tx.return_data) #function return
@@ -1224,13 +1225,15 @@ class ManticoreEVM(Manticore):
is_argument_symbolic = any(map(issymbolic, arguments))
is_something_symbolic = is_something_symbolic or is_argument_symbolic
tx_summary.write(') -> %s %s\n' % ( tx.result, flagged(is_argument_symbolic)))
is_return_symbolic = any(map(issymbolic, return_data))
return_values = tuple(map(state.solve_one, return_data))
if len(return_values) == 1:
return_values = return_values[0]
tx_summary.write('return: %r %s\n' % ( return_values, flagged(is_return_symbolic)))
is_something_symbolic = is_something_symbolic or is_return_symbolic
if return_data is not None:
is_return_symbolic = any(map(issymbolic, return_data))
return_values = tuple(map(state.solve_one, return_data))
if len(return_values) == 1:
return_values = return_values[0]
tx_summary.write('return: %r %s\n' % ( return_values, flagged(is_return_symbolic)))
is_something_symbolic = is_something_symbolic or is_return_symbolic
tx_summary.write('\n\n')