16.3.2 Virtual machine code

The virtual machine code is just a bunch of evaluable expressions that permit read/write from memory and registers and also supports the definition of new opcodes. Each expression can be delimited with a comma to permite multiple expressions to be executed in one line.

This feature is nice for emulating opcodes that internally do more than one microoperation (a radare virtual machine expression) at once. For example 'call' that is a push+jmp

WIth the 'avo' command we can create, remove and list defined virtual opcodes for the virtual machine.

[0x4A13B8C0]> avo
mov = $1=$2
lea = $1=$2
add = $1=$1+$2
sub = $1=$1-$2
jmp = eip=$1
push = esp=esp-4,[esp]=$1
pop = $1=[esp],esp=esp+4
call = esp=esp-4,[esp]=eip+$$$,eip=$1
ret = eip=[esp],esp=esp+4