# This filter is compiled to all_instructions.bpf by the `bpf_asm` | |
# tool, which can be found in the linux kernel source tree under | |
# tools/bpf. | |
# Load immediate | |
ld #42 | |
ldx #42 | |
# Load scratch | |
ld M[3] | |
ldx M[3] | |
# Load absolute | |
ldb [42] | |
ldh [42] | |
ld [42] | |
# Load indirect | |
ldb [x + 42] | |
ldh [x + 42] | |
ld [x + 42] | |
# Load IPv4 header length | |
ldx 4*([42]&0xf) | |
# Run extension function | |
ld #len | |
ld #proto | |
ld #type | |
ld #rand | |
# Store scratch | |
st M[3] | |
stx M[3] | |
# A <op> constant | |
add #42 | |
sub #42 | |
mul #42 | |
div #42 | |
or #42 | |
and #42 | |
lsh #42 | |
rsh #42 | |
mod #42 | |
xor #42 | |
# A <op> X | |
add x | |
sub x | |
mul x | |
div x | |
or x | |
and x | |
lsh x | |
rsh x | |
mod x | |
xor x | |
# !A | |
neg | |
# Jump A <op> constant | |
ja end | |
jeq #42,prev,end | |
jne #42,end | |
jlt #42,end | |
jle #42,end | |
jgt #42,prev,end | |
jge #42,prev,end | |
jset #42,prev,end | |
# Jump A <op> X | |
jeq x,prev,end | |
jne x,end | |
jlt x,end | |
jle x,end | |
jgt x,prev,end | |
jge x,prev,end | |
jset x,prev,end | |
# Register transfers | |
tax | |
txa | |
# Returns | |
prev: ret a | |
end: ret #42 |