Byte adicional en el código de bytes TheDAO v1

Intenté descompilar el código de bytes TheDAO v1 con disasm y parece fallarme. Ingresé el código de bytes TheDAO aquí y descubrí que la última instrucción era:

[10836] PUSH16 0xc84ba6bc95484008f6362f93160ef3e5

Como puede ver, el código de bytes termina con f3e5y parece ignorar el último byte 63. Cuando elimino este último byte del código de bytes de TheDAO y trato de ejecutarlo nuevamente, funciona correctamente.

¿Alguien puede explicar cuál es el propósito del último byte ( 63) allí?

Estoy usando disasm empaquetado con ethereum-go en la versión 1.3.6.

Este es el error que recibo cuando ejecuto el código de bytes DAO a través de disasm:

<code>...
10819  CODESIZE
10820  PUSH16  => c84ba6bc95484008f6362f93160ef3e5
10837  PUSH4panic: runtime error: slice bounds out of range   
goroutine 1 [running]:
panic(0x598e80, 0xc42000c110)
        /usr/local/go/src/runtime/panic.go:500 +0x1a1
main.main()
        /root/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/cmd/disasm/main.go:45 +0x43e
</code>

Y este es el error con el evm disasm v1.6.0 - https://pastebin.com/zx48s5ax

¿Podría describir "parece fallar" con más detalle?
En particular, los comandos utilizados y las versiones. (Además, ¿quisiste decir evmdisal escribir disasm?..)
( disasmes el desensamblador "oficial" en el paquete combinado "Geth and Tools").
@NoelMaersk actualicé la pregunta con el error que recibo y la versión de disasm que estoy usando

Respuestas (1)

El final del código puede usarse como "área de datos", es decir, código que nunca se ejecuta pero que puede leerse. El optimizador Solidity, por ejemplo, tiene una etapa en la que analiza todas las constantes (es decir, instrucciones PUSH) y prueba varios métodos para optimizarlas. Una de ellas es mover la constante al final del código y usar CODECOPY para recuperarla. Esto es especialmente eficiente si se usa la misma constante larga en muchos lugares.

Entonces, ¿significa esto que evm disasm no puede manejar estas optimizaciones realizadas por el optimizador de solidez?
presentó un problema aquí con respecto a esto: github.com/ethereum/go-ethereum/issues/14376 ¡Gracias!