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

58 lines
30 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 {
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": "0 PUSH1 0x80\n2 PUSH1 0x40\n4 MSTORE\n5 PUSH1 0x04\n7 CALLDATASIZE\n8 LT\n9 PUSH2 0x0078\n12 JUMPI", "id": "139", "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": "121 PUSH1 0x00\n123 DUP1\n124 REVERT", "id": "140", "isExpanded": false, "label": "121 PUSH1 0x00\n123 DUP1\n124 REVERT", "size": 150, "truncLabel": "121 PUSH1 0x00\n123 DUP1\n124 REVERT"}, {"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": "141", "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": "126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI", "id": "142", "isExpanded": false, "label": "126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI", "size": 150, "truncLabel": "126 CALLVALUE\n127 DUP1\n128 ISZERO\n129 PUSH2 0x0089\n132 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "65 DUP1\n66 PUSH4 0x27e235e3\n71 EQ\n72 PUSH2 0x00a8\n75 JUMPI", "id": "143", "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": "138 POP\n139 PUSH2 0x0092\n142 PUSH2 0x018e\n145 JUMP", "id": "144", "isExpanded": false, "label": "138 POP\n139 PUSH2 0x0092\n142 PUSH2 0x018e\n145 JUMP", "size": 150, "truncLabel": "138 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": "145", "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": "169 CALLVALUE\n170 DUP1\n171 ISZERO\n172 PUSH2 0x00b4\n175 JUMPI", "id": "146", "isExpanded": false, "label": "169 CALLVALUE\n170 DUP1\n171 ISZERO\n172 PUSH2 0x00b4\n175 JUMPI", "size": 150, "truncLabel": "169 CALLVALUE\n170 DUP1\n171 ISZERO\n172 PUSH2 0x00b4\n175 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "76 DUP1\n77 PUSH4 0x56885cd8\n82 EQ\n83 PUSH2 0x00ff\n86 JUMPI", "id": "147", "isExpanded": false, "label": "76 DUP1\n77 PUSH4 0x56885cd8\n82 EQ\n83 PUSH2 0x00ff\n86 JUMPI", "size": 150, "truncLabel": "76 DUP1\n77 PUSH4 0x56885cd8\n82 EQ\n83 PUSH2 0x00ff\n86 JUMPI"}, {"color": {"background": "#2f7e5b", "border": "#26996f", "highlight": {"background": "#28a16f", "border": "#26996f"}}, "fullLabel": "399 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
var edges = [{"arrows": "to", "from": "139", "label": "Not(ULE(4, calldatasize_Unknown))", "smooth": {"type": "cubicBezier"}, "to": "140"}, {"arrows": "to", "from": "139", "label": "ULE(4, calldatasize_Unknown)", "smooth": {"type": "cubicBezier"}, "to": "141"}, {"arrows": "to", "from": "141", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x12065fe0", "smooth": {"type": "cubicBezier"}, "to": "142"}, {"arrows": "to", "from": "141", "label": "Not(Extract(0xff, 0xe0, calldata_Unknown_0) == 0x12065fe0)", "smooth": {"type": "cubicBezier"}, "to": "143"}, {"arrows": "to", "from": "142", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "144"}, {"arrows": "to", "from": "142", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "145"}, {"arrows": "to", "from": "143", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x27e235e3", "smooth": {"type": "cubicBezier"}, "to": "146"}, {"arrows": "to", "from": "143", "label": "Not(Extract(0xff, 0xe0, calldata_Unknown_0) == 0x27e235e3)", "smooth": {"type": "cubicBezier"}, "to": "147"}, {"arrows": "to", "from": "144", "label": "", "smooth": {"type": "cubicBezier"}, "to": "148"}, {"arrows": "to", "from": "146", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "149"}, {"arrows": "to", "from": "146", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "150"}, {"arrows": "to", "from": "147", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x56885cd8", "smooth": {"type": "cubicBezier"}, "to": "151"}, {"arrows": "to", "from": "147", "label": "Not(Extract(0xff, 0xe0, calldata_Unknown_0) == 0x56885cd8)", "smooth": {"type": "cubicBezier"}, "to": "152"}, {"arrows": "to", "from": "151", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "153"}, {"arrows": "to", "from": "151", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "154"}, {"arrows": "to", "from": "152", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x6c343ffe", "smooth": {"type": "cubicBezier"}, "to": "155"}, {"arrows": "to", "from": "152", "label": "Not(Extract(0xff, 0xe0, calldata_Unknown_0) == 0x6c343ffe)", "smooth": {"type": "cubicBezier"}, "to": "156"}, {"arrows": "to", "from": "153", "label": "", "smooth": {"type": "cubicBezier"}, "to": "157"}, {"arrows": "to", "from": "155", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "158"}, {"arrows": "to", "from": "155", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "159"}, {"arrows": "to", "from": "156", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0x8da5cb5b", "smooth": {"type": "cubicBezier"}, "to": "160"}, {"arrows": "to", "from": "156", "label": "Not(Extract(0xff, 0xe0, calldata_Unknown_0) == 0x8da5cb5b)", "smooth": {"type": "cubicBezier"}, "to": "161"}, {"arrows": "to", "from": "158", "label": "", "smooth": {"type": "cubicBezier"}, "to": "162"}, {"arrows": "to", "from": "160", "label": "callvalue == 0", "smooth": {"type": "cubicBezier"}, "to": "163"}, {"arrows": "to", "from": "160", "label": "Not(callvalue == 0)", "smooth": {"type": "cubicBezier"}, "to": "164"}, {"arrows": "to", "from": "161", "label": "Extract(0xff, 0xe0, calldata_Unknown_0) == 0xe8b5e51f", "smooth": {"type": "cubicBezier"}, "to": "165"}, {"arrows": "to", "from": "161", "label": "Not(Extract(0xff, 0xe0, calldata_Unknown_0) == 0xe8b5e51f)", "smooth": {"type": "cubicBezier"}, "to": "166"}, {"arrows": "to", "from": "165", "label": "", "smooth": {"type": "cubicBezier"}, "to": "167"}, {"arrows": "to", "from": "163", "label": "", "smooth": {"type": "cubicBezier"}, "to": "168"}, {"arrows": "to", "from": "148", "label": "", "smooth": {"type": "cubicBezier"}, "to": "169"}, {"arrows": "to", "from": "149", "label": "", "smooth": {"type": "cubicBezier"}, "to": "170"}, {"arrows": "to", "from": "167", "label": "ULE(callvalue, storage_2)", "smooth": {"type": "cubicBezier"}, "to": "171"}, {"arrows": "to", "from": "167", "label": "Not(ULE(callvalue, storage_2))", "smooth": {"type": "cubicBezier"}, "to": "172"}, {"arrows": "to", "from":
</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>