Skip to content

Instantly share code, notes, and snippets.

@vicnaum
Created December 28, 2022 10:03
Show Gist options
  • Star 24 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save vicnaum/492d9ccfb66dc0f50b1fd8f99239f6a7 to your computer and use it in GitHub Desktop.
Save vicnaum/492d9ccfb66dc0f50b1fd8f99239f6a7 to your computer and use it in GitHub Desktop.
EVM Regex Decompiler

Translate EVM bytecode into opcodes using pure Regex :)

Demo: https://twitter.com/0x796/status/1608039943582142464

Try here: https://regex101.com/

Use PCRE2 (Perl compatible) Regex flavor.

Search:

(?:0x)?(?:(?<STOP>00)|(?<ADD>01)|(?<MUL>02)|(?<SUB>03)|(?<DIV>04)|(?<SDIV>05)|(?<MOD>06)|(?<SMOD>07)|(?<ADDMOD>08)|(?<MULMOD>09)|(?<EXP>0a)|(?<SIGNEXTEND>0b)|(?<LT>10)|(?<GT>11)|(?<SLT>12)|(?<SGT>13)|(?<EQ>14)|(?<ISZERO>15)|(?<AND>16)|(?<OR>17)|(?<XOR>18)|(?<NOT>19)|(?<BYTE>1a)|(?<SHL>1b)|(?<SHR>1c)|(?<SAR>1d)|(?<SHA3>20)|(?<ADDRESS>30)|(?<BALANCE>31)|(?<ORIGIN>32)|(?<CALLER>33)|(?<CALLVALUE>34)|(?<CALLDATALOAD>35)|(?<CALLDATASIZE>36)|(?<CALLDATACOPY>37)|(?<CODESIZE>38)|(?<CODECOPY>39)|(?<GASPRICE>3a)|(?<EXTCODESIZE>3b)|(?<EXTCODECOPY>3c)|(?<RETURNDATASIZE>3d)|(?<RETURNDATACOPY>3e)|(?<EXTCODEHASH>3f)|(?<BLOCKHASH>40)|(?<COINBASE>41)|(?<TIMESTAMP>42)|(?<NUMBER>43)|(?<DIFFICULTY>44)|(?<GASLIMIT>45)|(?<CHAINID>46)|(?<SELFBALANCE>47)|(?<BASEFEE>48)|(?<POP>50)|(?<MLOAD>51)|(?<MSTORE>52)|(?<MSTORE8>53)|(?<SLOAD>54)|(?<SSTORE>55)|(?<JUMP>56)|(?<JUMPI>57)|(?<PC>58)|(?<MSIZE>59)|(?<GAS>5a)|(?<JUMPDEST>5b)|(?<PUSH1>60)\s*(?<PUSH1_DATA>.{2})|(?<PUSH2>61)\s*(?<PUSH2_DATA>.{4})|(?<PUSH3>62)\s*(?<PUSH3_DATA>.{6})|(?<PUSH4>63)\s*(?<PUSH4_DATA>.{8})|(?<PUSH5>64)\s*(?<PUSH5_DATA>.{10})|(?<PUSH6>65)\s*(?<PUSH6_DATA>.{12})|(?<PUSH7>66)\s*(?<PUSH7_DATA>.{14})|(?<PUSH8>67)\s*(?<PUSH8_DATA>.{16})|(?<PUSH9>68)\s*(?<PUSH9_DATA>.{18})|(?<PUSH10>69)\s*(?<PUSH10_DATA>.{20})|(?<PUSH11>6a)\s*(?<PUSH11_DATA>.{22})|(?<PUSH12>6b)\s*(?<PUSH12_DATA>.{24})|(?<PUSH13>6c)\s*(?<PUSH13_DATA>.{26})|(?<PUSH14>6d)\s*(?<PUSH14_DATA>.{28})|(?<PUSH15>6e)\s*(?<PUSH15_DATA>.{30})|(?<PUSH16>6f)\s*(?<PUSH16_DATA>.{32})|(?<PUSH17>70)\s*(?<PUSH17_DATA>.{34})|(?<PUSH18>71)\s*(?<PUSH18_DATA>.{36})|(?<PUSH19>72)\s*(?<PUSH19_DATA>.{38})|(?<PUSH20>73)\s*(?<PUSH20_DATA>.{40})|(?<PUSH21>74)\s*(?<PUSH21_DATA>.{42})|(?<PUSH22>75)\s*(?<PUSH22_DATA>.{44})|(?<PUSH23>76)\s*(?<PUSH23_DATA>.{46})|(?<PUSH24>77)\s*(?<PUSH24_DATA>.{48})|(?<PUSH25>78)\s*(?<PUSH25_DATA>.{50})|(?<PUSH26>79)\s*(?<PUSH26_DATA>.{52})|(?<PUSH27>7a)\s*(?<PUSH27_DATA>.{54})|(?<PUSH28>7b)\s*(?<PUSH28_DATA>.{56})|(?<PUSH29>7c)\s*(?<PUSH29_DATA>.{58})|(?<PUSH30>7d)\s*(?<PUSH30_DATA>.{60})|(?<PUSH31>7e)\s*(?<PUSH31_DATA>.{62})|(?<PUSH32>7f)\s*(?<PUSH32_DATA>.{64})|(?<DUP1>80)|(?<DUP2>81)|(?<DUP3>82)|(?<DUP4>83)|(?<DUP5>84)|(?<DUP6>85)|(?<DUP7>86)|(?<DUP8>87)|(?<DUP9>88)|(?<DUP10>89)|(?<DUP11>8a)|(?<DUP12>8b)|(?<DUP13>8c)|(?<DUP14>8d)|(?<DUP15>8e)|(?<DUP16>8f)|(?<SWAP1>90)|(?<SWAP2>91)|(?<SWAP3>92)|(?<SWAP4>93)|(?<SWAP5>94)|(?<SWAP6>95)|(?<SWAP7>96)|(?<SWAP8>97)|(?<SWAP9>98)|(?<SWAP10>99)|(?<SWAP11>9a)|(?<SWAP12>9b)|(?<SWAP13>9c)|(?<SWAP14>9d)|(?<SWAP15>9e)|(?<SWAP16>9f)|(?<LOG0>a0)|(?<LOG1>a1)|(?<LOG2>a2)|(?<LOG3>a3)|(?<LOG4>a4)|(?<CREATE>f0)|(?<CALL>f1)|(?<CALLCODE>f2)|(?<RETURN>f3)|(?<DELEGATECALL>f4)|(?<CREATE2>f5)|(?<STATICCALL>fa)|(?<REVERT>fd)|(?<INVALID>fe)|(?<SELFDESTRUCT>ff)|(?<WHITESPACE>\s*)|(?<COMMENTS>\/\/.*?$))

Replace:

${STOP:+STOP\n}${ADD:+ADD\n}${MUL:+MUL\n}${SUB:+SUB\n}${DIV:+DIV\n}${SDIV:+SDIV\n}${MOD:+MOD\n}${SMOD:+SMOD\n}${ADDMOD:+ADDMOD\n}${MULMOD:+MULMOD\n}${EXP:+EXP\n}${SIGNEXTEND:+SIGNEXTEND\n}${LT:+LT\n}${GT:+GT\n}${SLT:+SLT\n}${SGT:+SGT\n}${EQ:+EQ\n}${ISZERO:+ISZERO\n}${AND:+AND\n}${OR:+OR\n}${XOR:+XOR\n}${NOT:+NOT\n}${BYTE:+BYTE\n}${SHL:+SHL\n}${SHR:+SHR\n}${SAR:+SAR\n}${SHA3:+SHA3\n}${ADDRESS:+ADDRESS\n}${BALANCE:+BALANCE\n}${ORIGIN:+ORIGIN\n}${CALLER:+CALLER\n}${CALLVALUE:+CALLVALUE\n}${CALLDATALOAD:+CALLDATALOAD\n}${CALLDATASIZE:+CALLDATASIZE\n}${CALLDATACOPY:+CALLDATACOPY\n}${CODESIZE:+CODESIZE\n}${CODECOPY:+CODECOPY\n}${GASPRICE:+GASPRICE\n}${EXTCODESIZE:+EXTCODESIZE\n}${EXTCODECOPY:+EXTCODECOPY\n}${RETURNDATASIZE:+RETURNDATASIZE\n}${RETURNDATACOPY:+RETURNDATACOPY\n}${EXTCODEHASH:+EXTCODEHASH\n}${BLOCKHASH:+BLOCKHASH\n}${COINBASE:+COINBASE\n}${TIMESTAMP:+TIMESTAMP\n}${NUMBER:+NUMBER\n}${DIFFICULTY:+DIFFICULTY\n}${GASLIMIT:+GASLIMIT\n}${CHAINID:+CHAINID\n}${SELFBALANCE:+SELFBALANCE\n}${BASEFEE:+BASEFEE\n}${POP:+POP\n}${MLOAD:+MLOAD\n}${MSTORE:+MSTORE\n}${MSTORE8:+MSTORE8\n}${SLOAD:+SLOAD\n}${SSTORE:+SSTORE\n}${JUMP:+JUMP\n}${JUMPI:+JUMPI\n}${PC:+PC\n}${MSIZE:+MSIZE\n}${GAS:+GAS\n}${JUMPDEST:+JUMPDEST\n}${PUSH1:+PUSH1 ${PUSH1_DATA}\n}${PUSH2:+PUSH2 ${PUSH2_DATA}\n}${PUSH3:+PUSH3 ${PUSH3_DATA}\n}${PUSH4:+PUSH4 ${PUSH4_DATA}\n}${PUSH5:+PUSH5 ${PUSH5_DATA}\n}${PUSH6:+PUSH6 ${PUSH6_DATA}\n}${PUSH7:+PUSH7 ${PUSH7_DATA}\n}${PUSH8:+PUSH8 ${PUSH8_DATA}\n}${PUSH9:+PUSH9 ${PUSH9_DATA}\n}${PUSH10:+PUSH10 ${PUSH10_DATA}\n}${PUSH11:+PUSH11 ${PUSH11_DATA}\n}${PUSH12:+PUSH12 ${PUSH12_DATA}\n}${PUSH13:+PUSH13 ${PUSH13_DATA}\n}${PUSH14:+PUSH14 ${PUSH14_DATA}\n}${PUSH15:+PUSH15 ${PUSH15_DATA}\n}${PUSH16:+PUSH16 ${PUSH16_DATA}\n}${PUSH17:+PUSH17 ${PUSH17_DATA}\n}${PUSH18:+PUSH18 ${PUSH18_DATA}\n}${PUSH19:+PUSH19 ${PUSH19_DATA}\n}${PUSH20:+PUSH20 ${PUSH20_DATA}\n}${PUSH21:+PUSH21 ${PUSH21_DATA}\n}${PUSH22:+PUSH22 ${PUSH22_DATA}\n}${PUSH23:+PUSH23 ${PUSH23_DATA}\n}${PUSH24:+PUSH24 ${PUSH24_DATA}\n}${PUSH25:+PUSH25 ${PUSH25_DATA}\n}${PUSH26:+PUSH26 ${PUSH26_DATA}\n}${PUSH27:+PUSH27 ${PUSH27_DATA}\n}${PUSH28:+PUSH28 ${PUSH28_DATA}\n}${PUSH29:+PUSH29 ${PUSH29_DATA}\n}${PUSH30:+PUSH30 ${PUSH30_DATA}\n}${PUSH31:+PUSH31 ${PUSH31_DATA}\n}${PUSH32:+PUSH32 ${PUSH32_DATA}\n}${DUP1:+DUP1\n}${DUP2:+DUP2\n}${DUP3:+DUP3\n}${DUP4:+DUP4\n}${DUP5:+DUP5\n}${DUP6:+DUP6\n}${DUP7:+DUP7\n}${DUP8:+DUP8\n}${DUP9:+DUP9\n}${DUP10:+DUP10\n}${DUP11:+DUP11\n}${DUP12:+DUP12\n}${DUP13:+DUP13\n}${DUP14:+DUP14\n}${DUP15:+DUP15\n}${DUP16:+DUP16\n}${SWAP1:+SWAP1\n}${SWAP2:+SWAP2\n}${SWAP3:+SWAP3\n}${SWAP4:+SWAP4\n}${SWAP5:+SWAP5\n}${SWAP6:+SWAP6\n}${SWAP7:+SWAP7\n}${SWAP8:+SWAP8\n}${SWAP9:+SWAP9\n}${SWAP10:+SWAP10\n}${SWAP11:+SWAP11\n}${SWAP12:+SWAP12\n}${SWAP13:+SWAP13\n}${SWAP14:+SWAP14\n}${SWAP15:+SWAP15\n}${SWAP16:+SWAP16\n}${LOG0:+LOG0\n}${LOG1:+LOG1\n}${LOG2:+LOG2\n}${LOG3:+LOG3\n}${LOG4:+LOG4\n}${CREATE:+CREATE\n}${CALL:+CALL\n}${CALLCODE:+CALLCODE\n}${RETURN:+RETURN\n}${DELEGATECALL:+DELEGATECALL\n}${CREATE2:+CREATE2\n}${STATICCALL:+STATICCALL\n}${REVERT:+REVERT\n}${INVALID:+INVALID\n}${SELFDESTRUCT:+SELFDESTRUCT\n}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment