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/underflow.sol.o.graph.html

62 lines
578 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 0x60\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n9 PUSH2 0x0062\n12 JUMPI", "id": "1142", "isExpanded": false, "label": "0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n(click to expand +)", "size": 150, "truncLabel": "0 PUSH1 0x60\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 0x18160ddd\n60 EQ\n61 PUSH2 0x0067\n64 JUMPI", "id": "1143", "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": "98 JUMPDEST\n99 PUSH1 0x00\n101 DUP1\n102 REVERT", "id": "1144", "isExpanded": false, "label": "98 JUMPDEST\n99 PUSH1 0x00\n101 DUP1\n102 REVERT", "size": 150, "truncLabel": "98 JUMPDEST\n99 PUSH1 0x00\n101 DUP1\n102 REVERT"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "65 DUP1\n66 PUSH4 0x6241bfd1\n71 EQ\n72 PUSH2 0x0090\n75 JUMPI", "id": "1145", "isExpanded": false, "label": "65 DUP1\n66 PUSH4 0x6241bfd1\n71 EQ\n72 PUSH2 0x0090\n75 JUMPI", "size": 150, "truncLabel": "65 DUP1\n66 PUSH4 0x6241bfd1\n71 EQ\n72 PUSH2 0x0090\n75 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "103 JUMPDEST\n104 CALLVALUE\n105 ISZERO\n106 PUSH2 0x0072\n109 JUMPI", "id": "1146", "isExpanded": false, "label": "103 JUMPDEST\n104 CALLVALUE\n105 ISZERO\n106 PUSH2 0x0072\n109 JUMPI", "size": 150, "truncLabel": "103 JUMPDEST\n104 CALLVALUE\n105 ISZERO\n106 PUSH2 0x0072\n109 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "110 PUSH1 0x00\n112 DUP1\n113 REVERT", "id": "1147", "isExpanded": false, "label": "110 PUSH1 0x00\n112 DUP1\n113 REVERT", "size": 150, "truncLabel": "110 PUSH1 0x00\n112 DUP1\n113 REVERT"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "114 JUMPDEST\n115 PUSH2 0x007a\n118 PUSH2 0x015a\n121 JUMP", "id": "1148", "isExpanded": false, "label": "114 JUMPDEST\n115 PUSH2 0x007a\n118 PUSH2 0x015a\n121 JUMP", "size": 150, "truncLabel": "114 JUMPDEST\n115 PUSH2 0x007a\n118 PUSH2 0x015a\n121 JUMP"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "346 JUMPDEST\n347 PUSH1 0x01\n349 SLOAD\n350 DUP2\n351 JUMP", "id": "1149", "isExpanded": false, "label": "346 JUMPDEST\n347 PUSH1 0x01\n349 SLOAD\n350 DUP2\n351 JUMP", "size": 150, "truncLabel": "346 JUMPDEST\n347 PUSH1 0x01\n349 SLOAD\n350 DUP2\n351 JUMP"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "122 JUMPDEST\n123 PUSH1 0x40\n125 MLOAD\n126 DUP1\n127 DUP3\n128 DUP2\n129 MSTORE\n130 PUSH1 0x20\n132 ADD\n133 SWAP2\n134 POP\n135 POP\n136 PUSH1 0x40\n138 MLOAD\n139 DUP1\n140 SWAP2\n141 SUB\n142 SWAP1\n143 RETURN", "id": "1150", "isExpanded": false, "label": "122 JUMPDEST\n123 PUSH1 0x40\n125 MLOAD\n126 DUP1\n127 DUP3\n128 DUP2\n(click to expand +)", "size": 150, "truncLabel": "122 JUMPDEST\n123 PUSH1 0x40\n125 MLOAD\n126 DUP1\n127 DUP3\n128 DUP2\n(click to expand +)"}, {"color": {"background": "#2f7e5b", "border": "#26996f",
var edges = [{"arrows": "to", "from": "1142", "label": "ULE(4, 20_calldatasize)", "smooth": {"type": "cubicBezier"}, "to": "1143"}, {"arrows": "to", "from": "1142", "label": "Not(ULE(4, 20_calldatasize))", "smooth": {"type": "cubicBezier"}, "to": "1144"}, {"arrows": "to", "from": "1143", "label": "Not(And(20_calldata[3] == 0xdd, 20_calldata[2] == 13, 20_calldata[1] == 22, 20_calldata[0] == 24))", "smooth": {"type": "cubicBezier"}, "to": "1145"}, {"arrows": "to", "from": "1143", "label": "And(20_calldata[3] == 0xdd, 20_calldata[2] == 13, 20_calldata[1] == 22, 20_calldata[0] == 24)", "smooth": {"type": "cubicBezier"}, "to": "1146"}, {"arrows": "to", "from": "1146", "label": "Not(call_value20 == 0)", "smooth": {"type": "cubicBezier"}, "to": "1147"}, {"arrows": "to", "from": "1146", "label": "call_value20 == 0", "smooth": {"type": "cubicBezier"}, "to": "1148"}, {"arrows": "to", "from": "1148", "label": "", "smooth": {"type": "cubicBezier"}, "to": "1149"}, {"arrows": "to", "from": "1149", "label": "", "smooth": {"type": "cubicBezier"}, "to": "1150"}, {"arrows": "to", "from": "1145", "label": "Not(And(20_calldata[3] == 0xd1, 20_calldata[2] == 0xbf, 20_calldata[1] == 65, 20_calldata[0] == 98))", "smooth": {"type": "cubicBezier"}, "to": "1151"}, {"arrows": "to", "from": "1145", "label": "And(20_calldata[3] == 0xd1, 20_calldata[2] == 0xbf, 20_calldata[1] == 65, 20_calldata[0] == 98)", "smooth": {"type": "cubicBezier"}, "to": "1152"}, {"arrows": "to", "from": "1152", "label": "Not(call_value20 == 0)", "smooth": {"type": "cubicBezier"}, "to": "1153"}, {"arrows": "to", "from": "1152", "label": "call_value20 == 0", "smooth": {"type": "cubicBezier"}, "to": "1154"}, {"arrows": "to", "from": "1154", "label": "", "smooth": {"type": "cubicBezier"}, "to": "1155"}, {"arrows": "to", "from": "1155", "label": "", "smooth": {"type": "cubicBezier"}, "to": "1156"}, {"arrows": "to", "from": "1151", "label": "Not(And(20_calldata[3] == 49, 20_calldata[2] == 0x82, 20_calldata[1] == 0xa0, 20_calldata[0] == 0x70))", "smooth": {"type": "cubicBezier"}, "to": "1157"}, {"arrows": "to", "from": "1151", "label": "And(20_calldata[3] == 49, 20_calldata[2] == 0x82, 20_calldata[1] == 0xa0, 20_calldata[0] == 0x70)", "smooth": {"type": "cubicBezier"}, "to": "1158"}, {"arrows": "to", "from": "1158", "label": "Not(call_value20 == 0)", "smooth": {"type": "cubicBezier"}, "to": "1159"}, {"arrows": "to", "from": "1158", "label": "call_value20 == 0", "smooth": {"type": "cubicBezier"}, "to": "1160"}, {"arrows": "to", "from": "1160", "label": "", "smooth": {"type": "cubicBezier"}, "to": "1161"}, {"arrows": "to", "from": "1161", "label": "", "smooth": {"type": "cubicBezier"}, "to": "1162"}, {"arrows": "to", "from": "1157", "label": "Not(And(20_calldata[3] == 0x87, 20_calldata[2] == 14, 20_calldata[1] == 33, 20_calldata[0] == 0xa3))", "smooth": {"type": "cubicBezier"}, "to": "1163"}, {"arrows": "to", "from": "1157", "label": "And(20_calldata[3] == 0x87, 20_calldata[2] == 14, 20_calldata[1] == 33, 20_calldata[0] == 0xa3)", "smooth": {"type": "cubicBezier"}, "to": "1164"}, {"arrows": "to", "from": "1164", "label": "Not(call_value20 == 0)", "smooth": {"type": "cubicBezier"}, "to": "1165"}, {"arrows": "to", "from": "1164", "label": "call_value20 == 0", "smooth": {"type": "cubicBezier"}, "to": "1166"}, {"arrows": "to", "from": "1166", "label": "", "smooth": {"type": "cubicBezier"}, "to": "1167"}, {"arrows": "to", "from": "1167", "label": "True", "smooth": {"type": "cubicBezier"}, "to": "1168"}, {"arrows": "to", "from": "1168", "label": "And(20_calldata[35] == Extract(7, 0, caller20), 20_calldata[34] == Extract(15, 8, caller20), 20_calldata[33] == Extract(23, 16, caller20), 20_calldata[32] == Extract(31, 24, caller20), 20_calldata[31] == Extract(39, 32, caller20), 20_calldata[30] == Extract(47, 40, caller20), 20_calldata[29] == Extract(55, 48, caller20), 20_calldata[28] == Extract(63, 56, caller20), 20_calldata[27] == Extract(71,
</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>