mirror of https://github.com/ConsenSys/mythril
blockchainethereumsmart-contractssoliditysecurityprogram-analysissecurity-analysissymbolic-execution
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.7 KiB
64 lines
1.7 KiB
from mythril.disassembler.disassembly import SignatureDB, get_function_info
|
|
|
|
instruction_list = [
|
|
{"opcode": "PUSH4", "argument": "0x10203040"},
|
|
{"opcode": "EQ"},
|
|
{"opcode": "PUSH4", "argument": "0x40302010"},
|
|
{"opcode": "JUMPI"},
|
|
]
|
|
|
|
|
|
def test_get_function_info(mocker):
|
|
# Arrange
|
|
global instruction_list
|
|
|
|
signature_database_mock = SignatureDB()
|
|
mocker.patch.object(signature_database_mock, "get")
|
|
signature_database_mock.get.return_value = ["function_name"]
|
|
|
|
# Act
|
|
function_hash, entry_point, function_name = get_function_info(
|
|
0, instruction_list, signature_database_mock
|
|
)
|
|
|
|
# Assert
|
|
assert function_hash == "0x10203040"
|
|
assert entry_point == 0x40302010
|
|
assert function_name == "function_name"
|
|
|
|
|
|
def test_get_function_info_multiple_names(mocker):
|
|
# Arrange
|
|
global instruction_list
|
|
|
|
signature_database_mock = SignatureDB()
|
|
mocker.patch.object(signature_database_mock, "get")
|
|
signature_database_mock.get.return_value = ["function_name", "another_name"]
|
|
|
|
# Act
|
|
function_hash, entry_point, function_name = get_function_info(
|
|
0, instruction_list, signature_database_mock
|
|
)
|
|
|
|
# Assert
|
|
assert function_name in (
|
|
"function_name or another_name",
|
|
"another_name or function_name",
|
|
)
|
|
|
|
|
|
def test_get_function_info_no_names(mocker):
|
|
# Arrange
|
|
global instruction_list
|
|
|
|
signature_database_mock = SignatureDB()
|
|
mocker.patch.object(signature_database_mock, "get")
|
|
signature_database_mock.get.return_value = []
|
|
|
|
# Act
|
|
function_hash, entry_point, function_name = get_function_info(
|
|
0, instruction_list, signature_database_mock
|
|
)
|
|
|
|
# Assert
|
|
assert function_name == "_function_0x10203040"
|
|
|