The virtual machine language is described in the [Ethereum Yellowpaper](http://gavwood.com/paper.pdf).
### Tracing EVM execution
You can run a piece of bytecode in the [PyEthereum](https://github.com/ethereum/pyethereum) VM and trace its execution using the `-t` flag. This will output the instructions executed as well as the state of the stack for every execution step.
vm gas=b'999997' steps=1 depth=0 pushvalue=64 stack=[b'96'] pc=b'2' op=PUSH1 inst=96
vm gas=b'999994' steps=2 depth=0 stack=[b'96', b'64'] pc=b'4' op=POP inst=80
vm gas=b'999992' steps=3 depth=0 stack=[b'96'] pc=b'5' op=POP inst=80
```
### Disassembling a contract from the Ethereum blockchain
You can also load code from an existing contract in the Ethereum blockchain. For this, you need to have a full node running, and the RPC debug interface must be activated. For example, when running `geth` you can do this as follows: