Security analysis tool for EVM bytecode. Supports smart contracts built for Ethereum, Hedera, Quorum, Vechain, Roostock, Tron and other EVM-compatible blockchains.
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.
mythril/tests/testdata/outputs_expected/ether_send.sol.o.graph.html

56 lines
30 KiB

<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" integrity="sha256-iq5ygGJ7021Pi7H5S+QAUXCPUfaBzfqeplbg/KlEssg=" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js" integrity="sha256-JuQeAGbk9rG/EoRMixuy5X8syzICcvB0dj3KindZkY0=" crossorigin="anonymous"></script>
<style type="text/css">
#mynetwork {
background-color: #232625;
}
body {
background-color: #232625;
color: #ffffff;
font-size: 10px;
}
</style>
<script>
var options = {"autoResize": true, "edges": {"font": {"align": "horizontal", "background": "none", "color": "#FFFFFF", "face": "arial", "multi": false, "strokeColor": "#ffffff", "strokeWidth": 0, "vadjust": 0}}, "height": "100%", "layout": {"hierarchical": {"blockShifting": true, "direction": "LR", "edgeMinimization": true, "enabled": true, "levelSeparation": 450, "nodeSpacing": 200, "parentCentralization": false, "sortMethod": "directed", "treeSpacing": 100}, "improvedLayout": true}, "manipulation": false, "nodes": {"borderWidth": 1, "borderWidthSelected": 2, "chosen": true, "color": "#000000", "font": {"align": "left", "color": "#FFFFFF"}, "shape": "box"}, "physics": {"enabled": false}, "width": "100%"};
var nodes = [{"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "120 JUMPDEST\n121 PUSH1 0x00\n123 DUP1\n124 REVERT", "id": "81", "isExpanded": false, "label": "120 JUMPDEST\n121 PUSH1 0x00\n123 DUP1\n124 REVERT", "size": 150, "truncLabel": "120 JUMPDEST\n121 PUSH1 0x00\n123 DUP1\n124 REVERT"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "146 JUMPDEST\n147 PUSH1 0x40\n149 MLOAD\n150 DUP1\n151 DUP3\n152 DUP2\n153 MSTORE\n154 PUSH1 0x20\n156 ADD\n157 SWAP2\n158 POP\n159 POP\n160 PUSH1 0x40\n162 MLOAD\n163 DUP1\n164 SWAP2\n165 SUB\n166 SWAP1\n167 RETURN", "id": "86", "isExpanded": false, "label": "146 JUMPDEST\n147 PUSH1 0x40\n149 MLOAD\n150 DUP1\n151 DUP3\n152 DUP2\n(click to expand +)", "size": 150, "truncLabel": "146 JUMPDEST\n147 PUSH1 0x40\n149 MLOAD\n150 DUP1\n151 DUP3\n152 DUP2\n(click to expand +)"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "398 JUMPDEST\n399 PUSH1 0x00\n401 DUP1\n402 PUSH1 0x00\n404 CALLER\n405 PUSH20 0xffffffff(...)\n426 AND\n427 PUSH20 0xffffffff(...)\n448 AND\n449 DUP2\n450 MSTORE\n451 PUSH1 0x20\n453 ADD\n454 SWAP1\n455 DUP2\n456 MSTORE\n457 PUSH1 0x20\n459 ADD\n460 PUSH1 0x00\n462 SHA3\n463 SLOAD\n464 SWAP1\n465 POP\n466 SWAP1\n467 JUMP", "id": "85", "isExpanded": false, "label": "398 JUMPDEST\n399 PUSH1 0x00\n401 DUP1\n402 PUSH1 0x00\n404 CALLER\n405 PUSH20 0xffffffff(...)\n(click to expand +)", "size": 150, "truncLabel": "398 JUMPDEST\n399 PUSH1 0x00\n401 DUP1\n402 PUSH1 0x00\n404 CALLER\n405 PUSH20 0xffffffff(...)\n(click to expand +)"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "137 JUMPDEST\n138 POP\n139 PUSH2 0x0092\n142 PUSH2 0x018e\n145 JUMP", "id": "84", "isExpanded": false, "label": "137 JUMPDEST\n138 POP\n139 PUSH2 0x0092\n142 PUSH2 0x018e\n145 JUMP", "size": 150, "truncLabel": "137 JUMPDEST\n138 POP\n139 PUSH2 0x0092\n142 PUSH2 0x018e\n145 JUMP"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "133 PUSH1 0x00\n135 DUP1\n136 REVERT", "id": "87", "isExpanded": false, "label": "133 PUSH1 0x00\n135 DUP1\n136 REVERT", "size": 150, "truncLabel": "133 PUSH1 0x00\n135 DUP1\n136 REVERT"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "_function_0x12065fe0\n126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI", "id": "83", "isExpanded": false, "label": "_function_0x12065fe0\n126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI", "size": 150, "truncLabel": "_function_0x12065fe0\n126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "233 JUMPDEST\n234 PUSH1 0x40\n236 MLOAD\n237 DUP1\n238 DUP3\n239 DUP2\n240 MSTORE\n241 PUSH1 0x20\n243 ADD\n244 SWAP2\n245 POP\n246 POP\n247 PUSH1 0x40\n249 MLOAD\n250 DUP1\n251 SWAP2\n252 SUB\n253 SWAP1\n254 RETURN", "id": "92", "isExpanded": false, "label": "233 JUMPDEST\n234 PUSH1 0x40\n236 MLOAD\n237 DUP1\n238 DUP3\n239 DUP2\n(click to expand +)", "size": 150, "truncLabel": "233 JUMPDEST\n234 PUSH1 0x40\n236 MLOAD\n237 DUP1\n238 DUP3\n239 DUP2\n(click to expand +)"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "468 JUMPDEST\n469 PUSH1 0x00\n471 PUSH1 0x20\n473 MSTORE\n474 DUP1\n475 PUSH1 0x00\n477 MSTORE\n478 PUSH1 0x40\n480 PUSH1 0x00\n482 SHA3\n483 PUSH1 0x00\n485 SWAP2\n486 POP\n487 SWAP1\n488 POP\n489 SLOAD\n490 DUP2\n491 JUMP", "id": "91", "isExpanded": false, "label": "468 JUMPDEST\n469 PUSH1 0x00\n471 PUSH1 0x20\n473 MSTORE\n474 DUP1\n475 PUSH1 0x00\n(click to expand +)", "size":
var edges = [{"arrows": "to", "from": "80", "label": "Not(ULE(4, calldatasize_Unknown))", "smooth": {"type": "cubicBezier"}, "to": "81"}, {"arrows": "to", "from": "85", "label": "", "smooth": {"type": "cubicBezier"}, "to": "86"}, {"arrows": "to", "from": "84", "label": "", "smooth": {"type": "cubicBezier"}, "to": "85"}, {"arrows": "to", "from": "83", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "84"}, {"arrows": "to", "from": "83", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "87"}, {"arrows": "to", "from": "82", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x12065fe0", "smooth": {"type": "cubicBezier"}, "to": "83"}, {"arrows": "to", "from": "91", "label": "", "smooth": {"type": "cubicBezier"}, "to": "92"}, {"arrows": "to", "from": "90", "label": "", "smooth": {"type": "cubicBezier"}, "to": "91"}, {"arrows": "to", "from": "89", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "90"}, {"arrows": "to", "from": "89", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "93"}, {"arrows": "to", "from": "88", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x27e235e3", "smooth": {"type": "cubicBezier"}, "to": "89"}, {"arrows": "to", "from": "97", "label": "", "smooth": {"type": "cubicBezier"}, "to": "98"}, {"arrows": "to", "from": "96", "label": "", "smooth": {"type": "cubicBezier"}, "to": "97"}, {"arrows": "to", "from": "95", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "96"}, {"arrows": "to", "from": "95", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "99"}, {"arrows": "to", "from": "94", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x56885cd8", "smooth": {"type": "cubicBezier"}, "to": "95"}, {"arrows": "to", "from": "105", "label": "", "smooth": {"type": "cubicBezier"}, "to": "106"}, {"arrows": "to", "from": "104", "label": "Not(retval_722 == 0)", "smooth": {"type": "cubicBezier"}, "to": "105"}, {"arrows": "to", "from": "104", "label": "retval_722 == 0", "smooth": {"type": "cubicBezier"}, "to": "107"}, {"arrows": "to", "from": "103", "label": "Extract(0x9f, 0, caller) == Extract(0xa7, 8, storage_1)", "smooth": {"type": "cubicBezier"}, "to": "104"}, {"arrows": "to", "from": "103", "label": "Not(Extract(0x9f, 0, caller) == Extract(0xa7, 8, storage_1))", "smooth": {"type": "cubicBezier"}, "to": "108"}, {"arrows": "to", "from": "102", "label": "", "smooth": {"type": "cubicBezier"}, "to": "103"}, {"arrows": "to", "from": "101", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "102"}, {"arrows": "to", "from": "101", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "109"}, {"arrows": "to", "from": "100", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x6c343ffe", "smooth": {"type": "cubicBezier"}, "to": "101"}, {"arrows": "to", "from": "113", "label": "", "smooth": {"type": "cubicBezier"}, "to": "114"}, {"arrows": "to", "from": "112", "label": "", "smooth": {"type": "cubicBezier"}, "to": "113"}, {"arrows": "to", "from": "111", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "112"}, {"arrows": "to", "from": "111", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "115"}, {"arrows": "to", "from": "110", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x8da5cb5b", "smooth": {"type": "cubicBezier"}, "to": "111"}, {"arrows": "to", "from": "120", "label": "", "smooth": {"type": "cubicBezier"}, "to": "121"}, {"arrows": "to", "from": "119", "label": "Not(ULE(callvalue, storage_2))", "smooth": {"type": "cubicBezier"}, "to": "120"}, {"arrows": "to", "from": "119", "label": "ULE(callvalue, storage_2)", "smooth": {"type": "cubicBezier"}, "to": "122"}, {"arrows": "to", "from": "118", "label": "ULE(callvalue, storage_2)", "smooth": {"type": "cubicBezier"}, "to": "119"}, {"arrows": "to", "from": "124", "label": "", "smooth": {"type": "cubicBezier"}, "to": "125"}, {"arrows": "to", "from": "123", "label": "Not(ULE(storage_3, callvalue))", "smooth": {"type": "cubicBezier"}, "to": "124"},
</script>
</head>
<body>
<p>Mythril / Ethereum LASER Symbolic VM</p>
<p><div id="mynetwork"></div><br/></p>
<script type="text/javascript">
var container = document.getElementById('mynetwork');
var nodesSet = new vis.DataSet(nodes);
var edgesSet = new vis.DataSet(edges);
var data = {'nodes': nodesSet, 'edges': edgesSet}
var gph = new vis.Network(container, data, options);
gph.on("click", function (params) {
// parse node id
var nodeID = params['nodes']['0'];
if (nodeID) {
var clickedNode = nodesSet.get(nodeID);
if(clickedNode.isExpanded) {
clickedNode.label = clickedNode.truncLabel;
}
else {
clickedNode.label = clickedNode.fullLabel;
}
clickedNode.isExpanded = !clickedNode.isExpanded;
nodesSet.update(clickedNode);
}
});
</script>
</body>
</html>