There're multiple commands to compile solidity code into different outputs:
```
solc -o <directory> --opcodes <code.sol>
```
> Generates all the opcodes.
```
solc -o <directory> --asm <code.sol>
```
> Generates a `.evm` file. Which is a higher-level overview with some annotations.
```
solc -o <directory> --bin <code.sol>
```
> Generates the whole deployment bytecode.
```
solc -o <directory> --bin-runtime <code.sol>
```
> Generates the runtime bytecode (part of the deployment bytecode).
### Example
```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
contract SimpleStorage {
address contractOwner;
function example() public {
contractOwner = msg.sender;
}
}
```
SimpleStorage.opcode
```
PUSH1 0x80
PUSH1 0x40
MSTORE
CALLVALUE
DUP1
ISZERO
PUSH1
0xE JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0xA9 DUP1 PUSH1 0x1A PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x26 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54353F2F EQ PUSH1 0x2A JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH1 0x30 PUSH1 0x32 JUMP JUMPDEST STOP JUMPDEST CALLER PUSH0 PUSH0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA 0xEB 0xFB 0xD2 0xB8 DUP3 LOG1 DUP3 COINBASE STOP 0xEB 0x4B 0xEA 0xB4 0xC7 RETURN PUSH5 0xA0A0E834E0 0xC2 PUSH0 SWAP5 0xC5 0xB0 BLOBBASEFEE PUSH25 0xDF4EC664736F6C634300081C00330000000000000000000000
```
SimpleStorage.evm
```
/* "Contract.sol":58:171 contract SimpleStorage {... */
mstore(0x40, 0x80)
callvalue
dup1
iszero
tag_1
jumpi
revert(0x00, 0x00)
tag_1:
pop
dataSize(sub_0)
dup1
dataOffset(sub_0)
0x00
codecopy
0x00
return
stop
sub_0: assembly {
/* "Contract.sol":58:171 contract SimpleStorage {... */
mstore(0x40, 0x80)
callvalue
dup1
iszero
tag_1
jumpi
revert(0x00, 0x00)
tag_1:
pop
jumpi(tag_2, lt(calldatasize, 0x04))
shr(0xe0, calldataload(0x00))
dup1
0x54353f2f
eq
tag_3
jumpi
tag_2:
revert(0x00, 0x00)
/* "Contract.sol":109:169 function example() public {... */
tag_3:
tag_4
tag_5
jump // in
tag_4:
stop
tag_5:
/* "Contract.sol":155:165 msg.sender */
caller
/* "Contract.sol":139:152 contractOwner */
0x00
0x00
/* "Contract.sol":139:165 contractOwner = msg.sender */
0x0100
exp
dup2
sload
dup2
0xffffffffffffffffffffffffffffffffffffffff
mul
not
and
swap1
dup4
0xffffffffffffffffffffffffffffffffffffffff
and
mul
or
swap1
sstore
pop
/* "Contract.sol":109:169 function example() public {... */
jump // out
auxdata: 0xa2646970667358221220aaebfbd2b882a1824100eb4beab4c7f364a0a0e834e0c25f94c5b04a78df4ec664736f6c634300081c0033
}
```
SimpleStorage.bin
```
6080604052348015600e575f5ffd5b5060a980601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c806354353f2f14602a575b5f5ffd5b60306032565b005b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555056fea2646970667358221220aaebfbd2b882a1824100eb4beab4c7f364a0a0e834e0c25f94c5b04a78df4ec664736f6c634300081c0033
```
SimpleStorage.bin-runtime
```
6080604052348015600e575f5ffd5b50600436106026575f3560e01c806354353f2f14602a575b5f5ffd5b60306032565b005b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555056fea2646970667358221220aaebfbd2b882a1824100eb4beab4c7f364a0a0e834e0c25f94c5b04a78df4ec664736f6c634300081c0033
```