Created
October 6, 2019 04:30
-
-
Save maurelian/ab05afc766ae8b82b8601079caa1a24e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
======= /Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol:Math ======= | |
EVM assembly: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":25:312 library Math {... */ | |
dataSize(sub_0) | |
dataOffset(sub_0) | |
/* "--CODEGEN--":132:134 */ | |
0x0b | |
/* "--CODEGEN--":166:173 */ | |
dup3 | |
/* "--CODEGEN--":155:164 */ | |
dup3 | |
/* "--CODEGEN--":146:153 */ | |
dup3 | |
/* "--CODEGEN--":137:174 */ | |
codecopy | |
/* "--CODEGEN--":255:262 */ | |
dup1 | |
/* "--CODEGEN--":249:263 */ | |
mload | |
/* "--CODEGEN--":246:247 */ | |
0x00 | |
/* "--CODEGEN--":241:264 */ | |
byte | |
/* "--CODEGEN--":235:239 */ | |
0x73 | |
/* "--CODEGEN--":232:265 */ | |
eq | |
/* "--CODEGEN--":222:224 */ | |
tag_1 | |
jumpi | |
/* "--CODEGEN--":269:278 */ | |
invalid | |
/* "--CODEGEN--":222:224 */ | |
tag_1: | |
/* "--CODEGEN--":293:302 */ | |
address | |
/* "--CODEGEN--":290:291 */ | |
0x00 | |
/* "--CODEGEN--":283:303 */ | |
mstore | |
/* "--CODEGEN--":323:327 */ | |
0x73 | |
/* "--CODEGEN--":314:321 */ | |
dup2 | |
/* "--CODEGEN--":306:328 */ | |
mstore8 | |
/* "--CODEGEN--":347:354 */ | |
dup3 | |
/* "--CODEGEN--":338:345 */ | |
dup2 | |
/* "--CODEGEN--":331:355 */ | |
return | |
stop | |
sub_0: assembly { | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":25:312 library Math {... */ | |
eq(address, deployTimeAddress()) | |
mstore(0x40, 0x80) | |
jumpi(tag_1, lt(calldatasize, 0x04)) | |
shr(0xe0, calldataload(0x00)) | |
dup1 | |
0x771602f7 | |
eq | |
tag_2 | |
jumpi | |
tag_1: | |
0x00 | |
dup1 | |
revert | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":46:177 function add(uint a, uint b) ... */ | |
tag_2: | |
dup2 | |
/* "--CODEGEN--":8:17 */ | |
dup1 | |
/* "--CODEGEN--":5:7 */ | |
iszero | |
tag_3 | |
jumpi | |
/* "--CODEGEN--":30:31 */ | |
0x00 | |
/* "--CODEGEN--":27:28 */ | |
dup1 | |
/* "--CODEGEN--":20:32 */ | |
revert | |
/* "--CODEGEN--":5:7 */ | |
tag_3: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":46:177 function add(uint a, uint b) ... */ | |
pop | |
tag_4 | |
0x04 | |
dup1 | |
calldatasize | |
sub | |
/* "--CODEGEN--":13:15 */ | |
0x40 | |
/* "--CODEGEN--":8:11 */ | |
dup2 | |
/* "--CODEGEN--":5:16 */ | |
lt | |
/* "--CODEGEN--":2:4 */ | |
iszero | |
tag_5 | |
jumpi | |
/* "--CODEGEN--":29:30 */ | |
0x00 | |
/* "--CODEGEN--":26:27 */ | |
dup1 | |
/* "--CODEGEN--":19:31 */ | |
revert | |
/* "--CODEGEN--":2:4 */ | |
tag_5: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":46:177 function add(uint a, uint b) ... */ | |
dup2 | |
add | |
swap1 | |
dup1 | |
dup1 | |
calldataload | |
swap1 | |
0x20 | |
add | |
swap1 | |
swap3 | |
swap2 | |
swap1 | |
dup1 | |
calldataload | |
swap1 | |
0x20 | |
add | |
swap1 | |
swap3 | |
swap2 | |
swap1 | |
pop | |
pop | |
pop | |
tag_6 | |
jump // in | |
tag_4: | |
mload(0x40) | |
dup1 | |
dup3 | |
dup2 | |
mstore | |
0x20 | |
add | |
swap2 | |
pop | |
pop | |
mload(0x40) | |
dup1 | |
swap2 | |
sub | |
swap1 | |
return | |
tag_6: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":146:150 uint */ | |
0x00 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":171:172 b */ | |
dup2 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":167:168 a */ | |
dup4 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":167:172 a + b */ | |
add | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":160:172 return a + b */ | |
swap1 | |
pop | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":46:177 function add(uint a, uint b) ... */ | |
swap3 | |
swap2 | |
pop | |
pop | |
jump // out | |
auxdata: 0xa265627a7a72305820831d1bcb82429952dfcaeca6568bd75febefc6a692850a7871919c0564cc92f764736f6c634300050a0032 | |
} | |
======= /Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol:UsesMath ======= | |
EVM assembly: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":314:442 contract UsesMath {... */ | |
mstore(0x40, 0x80) | |
callvalue | |
/* "--CODEGEN--":8:17 */ | |
dup1 | |
/* "--CODEGEN--":5:7 */ | |
iszero | |
tag_1 | |
jumpi | |
/* "--CODEGEN--":30:31 */ | |
0x00 | |
/* "--CODEGEN--":27:28 */ | |
dup1 | |
/* "--CODEGEN--":20:32 */ | |
revert | |
/* "--CODEGEN--":5:7 */ | |
tag_1: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":314:442 contract UsesMath {... */ | |
pop | |
dataSize(sub_0) | |
dup1 | |
dataOffset(sub_0) | |
0x00 | |
codecopy | |
0x00 | |
return | |
stop | |
sub_0: assembly { | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":314:442 contract UsesMath {... */ | |
mstore(0x40, 0x80) | |
callvalue | |
/* "--CODEGEN--":8:17 */ | |
dup1 | |
/* "--CODEGEN--":5:7 */ | |
iszero | |
tag_1 | |
jumpi | |
/* "--CODEGEN--":30:31 */ | |
0x00 | |
/* "--CODEGEN--":27:28 */ | |
dup1 | |
/* "--CODEGEN--":20:32 */ | |
revert | |
/* "--CODEGEN--":5:7 */ | |
tag_1: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":314:442 contract UsesMath {... */ | |
pop | |
jumpi(tag_2, lt(calldatasize, 0x04)) | |
shr(0xe0, calldataload(0x00)) | |
dup1 | |
0x2fbebd38 | |
eq | |
tag_3 | |
jumpi | |
tag_2: | |
0x00 | |
dup1 | |
revert | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":361:440 function foo(uint input) external {... */ | |
tag_3: | |
tag_4 | |
0x04 | |
dup1 | |
calldatasize | |
sub | |
/* "--CODEGEN--":13:15 */ | |
0x20 | |
/* "--CODEGEN--":8:11 */ | |
dup2 | |
/* "--CODEGEN--":5:16 */ | |
lt | |
/* "--CODEGEN--":2:4 */ | |
iszero | |
tag_5 | |
jumpi | |
/* "--CODEGEN--":29:30 */ | |
0x00 | |
/* "--CODEGEN--":26:27 */ | |
dup1 | |
/* "--CODEGEN--":19:31 */ | |
revert | |
/* "--CODEGEN--":2:4 */ | |
tag_5: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":361:440 function foo(uint input) external {... */ | |
dup2 | |
add | |
swap1 | |
dup1 | |
dup1 | |
calldataload | |
swap1 | |
0x20 | |
add | |
swap1 | |
swap3 | |
swap2 | |
swap1 | |
pop | |
pop | |
pop | |
tag_6 | |
jump // in | |
tag_4: | |
stop | |
tag_6: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":401:415 input.sub(100) */ | |
tag_8 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":411:414 100 */ | |
0x64 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":401:406 input */ | |
dup3 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":401:410 input.sub */ | |
tag_9 | |
swap1 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":401:415 input.sub(100) */ | |
swap2 | |
swap1 | |
0xffffffff | |
and | |
jump // in | |
tag_8: | |
pop | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":421:426 input */ | |
dup1 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":421:430 input.add */ | |
linkerSymbol("91eecd812fa5a124dcf7286f75374264aad6d9e05ce1aec4d57bd87f6310727b") | |
0x771602f7 | |
swap1 | |
swap2 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":431:434 100 */ | |
0x64 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":421:435 input.add(100) */ | |
mload(0x40) | |
dup4 | |
0xffffffff | |
and | |
0xe0 | |
shl | |
dup2 | |
mstore | |
0x04 | |
add | |
dup1 | |
dup4 | |
dup2 | |
mstore | |
0x20 | |
add | |
dup3 | |
dup2 | |
mstore | |
0x20 | |
add | |
swap3 | |
pop | |
pop | |
pop | |
0x20 | |
mload(0x40) | |
dup1 | |
dup4 | |
sub | |
dup2 | |
dup7 | |
dup1 | |
extcodesize | |
iszero | |
/* "--CODEGEN--":8:17 */ | |
dup1 | |
/* "--CODEGEN--":5:7 */ | |
iszero | |
tag_10 | |
jumpi | |
/* "--CODEGEN--":30:31 */ | |
0x00 | |
/* "--CODEGEN--":27:28 */ | |
dup1 | |
/* "--CODEGEN--":20:32 */ | |
revert | |
/* "--CODEGEN--":5:7 */ | |
tag_10: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":421:435 input.add(100) */ | |
pop | |
gas | |
delegatecall | |
iszero | |
/* "--CODEGEN--":8:17 */ | |
dup1 | |
/* "--CODEGEN--":5:7 */ | |
iszero | |
tag_11 | |
jumpi | |
/* "--CODEGEN--":45:61 */ | |
returndatasize | |
/* "--CODEGEN--":42:43 */ | |
0x00 | |
/* "--CODEGEN--":39:40 */ | |
dup1 | |
/* "--CODEGEN--":24:62 */ | |
returndatacopy | |
/* "--CODEGEN--":77:93 */ | |
returndatasize | |
/* "--CODEGEN--":74:75 */ | |
0x00 | |
/* "--CODEGEN--":67:94 */ | |
revert | |
/* "--CODEGEN--":5:7 */ | |
tag_11: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":421:435 input.add(100) */ | |
pop | |
pop | |
pop | |
pop | |
mload(0x40) | |
returndatasize | |
/* "--CODEGEN--":13:15 */ | |
0x20 | |
/* "--CODEGEN--":8:11 */ | |
dup2 | |
/* "--CODEGEN--":5:16 */ | |
lt | |
/* "--CODEGEN--":2:4 */ | |
iszero | |
tag_12 | |
jumpi | |
/* "--CODEGEN--":29:30 */ | |
0x00 | |
/* "--CODEGEN--":26:27 */ | |
dup1 | |
/* "--CODEGEN--":19:31 */ | |
revert | |
/* "--CODEGEN--":2:4 */ | |
tag_12: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":421:435 input.add(100) */ | |
dup2 | |
add | |
swap1 | |
dup1 | |
dup1 | |
mload | |
swap1 | |
0x20 | |
add | |
swap1 | |
swap3 | |
swap2 | |
swap1 | |
pop | |
pop | |
pop | |
pop | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":361:440 function foo(uint input) external {... */ | |
pop | |
jump // out | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":181:309 function sub(uint a, uint b) ... */ | |
tag_9: | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":278:282 uint */ | |
0x00 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":303:304 b */ | |
dup2 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":299:300 a */ | |
dup4 | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":299:304 a - b */ | |
sub | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":292:304 return a - b */ | |
swap1 | |
pop | |
/* "/Users/primary/Projects/Audits/0x-monorepo/contracts/exchange/contracts/src/delegatesToLib.sol":181:309 function sub(uint a, uint b) ... */ | |
swap3 | |
swap2 | |
pop | |
pop | |
jump // out | |
auxdata: 0xa265627a7a723058204bb375034435931bdc797655a214b59c46ede84e26bb10c79dc6e7d28bca0ab264736f6c634300050a0032 | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.5.9; | |
library Math { | |
function add(uint a, uint b) | |
public // this will be accessed using a delegatecall | |
returns (uint) | |
{ | |
return a + b; | |
} | |
function sub(uint a, uint b) | |
internal // this will be inlined to the contract | |
returns (uint) | |
{ | |
return a - b; | |
} | |
} | |
contract UsesMath { | |
using Math for uint; | |
function foo(uint input) external { | |
input.sub(100); | |
input.add(100); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment