Skip to content

Instantly share code, notes, and snippets.

@maurelian
Created October 6, 2019 04:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maurelian/ab05afc766ae8b82b8601079caa1a24e to your computer and use it in GitHub Desktop.
Save maurelian/ab05afc766ae8b82b8601079caa1a24e to your computer and use it in GitHub Desktop.
======= /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
}
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