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

63 lines
33 KiB

<!DOCTYPE html>
<html>
<head>
<title>Call Graph</title>
<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 {
height: 100%;
background-color: #232625;
}
body {
background-color: #232625;
color: #ffffff;
font-size: 10px;
}
html, body {
height: 95%;
}
</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": "0 PUSH1 0x80\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n9 PUSH2 0x0078\n12 JUMPI", "id": "113", "isExpanded": false, "label": "0 PUSH1 0x80\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n(click to expand +)", "size": 150, "truncLabel": "0 PUSH1 0x80\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n(click to expand +)"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "13 PUSH1 0x00\n15 CALLDATALOAD\n16 PUSH29 0x01000000(...)\n46 SWAP1\n47 DIV\n48 PUSH4 0xffffffff\n53 AND\n54 DUP1\n55 PUSH4 0x12065fe0\n60 EQ\n61 PUSH2 0x007d\n64 JUMPI", "id": "114", "isExpanded": false, "label": "13 PUSH1 0x00\n15 CALLDATALOAD\n16 PUSH29 0x01000000(...)\n46 SWAP1\n47 DIV\n48 PUSH4 0xffffffff\n(click to expand +)", "size": 150, "truncLabel": "13 PUSH1 0x00\n15 CALLDATALOAD\n16 PUSH29 0x01000000(...)\n46 SWAP1\n47 DIV\n48 PUSH4 0xffffffff\n(click to expand +)"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "120 JUMPDEST\n121 PUSH1 0x00\n123 DUP1\n124 REVERT", "id": "115", "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": "65 DUP1\n66 PUSH4 0x27e235e3\n71 EQ\n72 PUSH2 0x00a8\n75 JUMPI", "id": "116", "isExpanded": false, "label": "65 DUP1\n66 PUSH4 0x27e235e3\n71 EQ\n72 PUSH2 0x00a8\n75 JUMPI", "size": 150, "truncLabel": "65 DUP1\n66 PUSH4 0x27e235e3\n71 EQ\n72 PUSH2 0x00a8\n75 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "125 JUMPDEST\n126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI", "id": "117", "isExpanded": false, "label": "125 JUMPDEST\n126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI", "size": 150, "truncLabel": "125 JUMPDEST\n126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "133 PUSH1 0x00\n135 DUP1\n136 REVERT", "id": "118", "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": "137 JUMPDEST\n138 POP\n139 PUSH2 0x0092\n142 PUSH2 0x018e\n145 JUMP", "id": "119", "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": "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": "120", "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": "146 JUMPDEST\n147 PUSH1 0x40\n149 MLOAD\n150 DUP1\n151 DUP3\n152 DUP2\n153 MSTORE\n154 PUSH1 0x20\n156
var edges = [{"arrows": "to", "from": "113", "label": "ULE(4, 6_calldatasize)", "smooth": {"type": "cubicBezier"}, "to": "114"}, {"arrows": "to", "from": "113", "label": "Not(ULE(4, 6_calldatasize))", "smooth": {"type": "cubicBezier"}, "to": "115"}, {"arrows": "to", "from": "114", "label": "Not(And(6_calldata[3] == 0xe0, 6_calldata[2] == 95, 6_calldata[1] == 6, 6_calldata[0] == 18))", "smooth": {"type": "cubicBezier"}, "to": "116"}, {"arrows": "to", "from": "114", "label": "And(6_calldata[3] == 0xe0, 6_calldata[2] == 95, 6_calldata[1] == 6, 6_calldata[0] == 18)", "smooth": {"type": "cubicBezier"}, "to": "117"}, {"arrows": "to", "from": "117", "label": "Not(call_value6 == 0)", "smooth": {"type": "cubicBezier"}, "to": "118"}, {"arrows": "to", "from": "117", "label": "call_value6 == 0", "smooth": {"type": "cubicBezier"}, "to": "119"}, {"arrows": "to", "from": "119", "label": "", "smooth": {"type": "cubicBezier"}, "to": "120"}, {"arrows": "to", "from": "120", "label": "", "smooth": {"type": "cubicBezier"}, "to": "121"}, {"arrows": "to", "from": "116", "label": "Not(And(6_calldata[3] == 0xe3, 6_calldata[2] == 53, 6_calldata[1] == 0xe2, 6_calldata[0] == 39))", "smooth": {"type": "cubicBezier"}, "to": "122"}, {"arrows": "to", "from": "116", "label": "And(6_calldata[3] == 0xe3, 6_calldata[2] == 53, 6_calldata[1] == 0xe2, 6_calldata[0] == 39)", "smooth": {"type": "cubicBezier"}, "to": "123"}, {"arrows": "to", "from": "123", "label": "Not(call_value6 == 0)", "smooth": {"type": "cubicBezier"}, "to": "124"}, {"arrows": "to", "from": "123", "label": "call_value6 == 0", "smooth": {"type": "cubicBezier"}, "to": "125"}, {"arrows": "to", "from": "125", "label": "", "smooth": {"type": "cubicBezier"}, "to": "126"}, {"arrows": "to", "from": "126", "label": "", "smooth": {"type": "cubicBezier"}, "to": "127"}, {"arrows": "to", "from": "122", "label": "Not(And(6_calldata[3] == 0xd8, 6_calldata[2] == 92, 6_calldata[1] == 0x88, 6_calldata[0] == 86))", "smooth": {"type": "cubicBezier"}, "to": "128"}, {"arrows": "to", "from": "122", "label": "And(6_calldata[3] == 0xd8, 6_calldata[2] == 92, 6_calldata[1] == 0x88, 6_calldata[0] == 86)", "smooth": {"type": "cubicBezier"}, "to": "129"}, {"arrows": "to", "from": "129", "label": "Not(call_value6 == 0)", "smooth": {"type": "cubicBezier"}, "to": "130"}, {"arrows": "to", "from": "129", "label": "call_value6 == 0", "smooth": {"type": "cubicBezier"}, "to": "131"}, {"arrows": "to", "from": "131", "label": "", "smooth": {"type": "cubicBezier"}, "to": "132"}, {"arrows": "to", "from": "132", "label": "", "smooth": {"type": "cubicBezier"}, "to": "133"}, {"arrows": "to", "from": "128", "label": "Not(And(6_calldata[3] == 0xfe, 6_calldata[2] == 63, 6_calldata[1] == 52, 6_calldata[0] == 0x6c))", "smooth": {"type": "cubicBezier"}, "to": "134"}, {"arrows": "to", "from": "128", "label": "And(6_calldata[3] == 0xfe, 6_calldata[2] == 63, 6_calldata[1] == 52, 6_calldata[0] == 0x6c)", "smooth": {"type": "cubicBezier"}, "to": "135"}, {"arrows": "to", "from": "135", "label": "Not(call_value6 == 0)", "smooth": {"type": "cubicBezier"}, "to": "136"}, {"arrows": "to", "from": "135", "label": "call_value6 == 0", "smooth": {"type": "cubicBezier"}, "to": "137"}, {"arrows": "to", "from": "137", "label": "", "smooth": {"type": "cubicBezier"}, "to": "138"}, {"arrows": "to", "from": "138", "label": "Not(Extract(0x9f, 0, caller6) == Extract(0x9f, 0, storage_1))", "smooth": {"type": "cubicBezier"}, "to": "139"}, {"arrows": "to", "from": "138", "label": "Extract(0x9f, 0, caller6) == Extract(0x9f, 0, storage_1)", "smooth": {"type": "cubicBezier"}, "to": "140"}, {"arrows": "to", "from": "140", "label": "", "smooth": {"type": "cubicBezier"}, "to": "141"}, {"arrows": "to", "from": "141", "label": "6_retval_722 == 0", "smooth": {"type": "cubicBezier"}, "to": "142"}, {"arrows": "to", "from": "141", "label": "Not(6_retval_722 == 0)", "smooth": {"type": "cubicBezier"}, "to": "143"}, {"arrows": "to", "from": "143", "label"
</script>
</head>
<body>
<p>Mythril / Ethereum LASER Symbolic VM</p>
<div id="mynetwork"></div>
<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>