#define VMCF_OP0 0 #define VMCF_OP1 1 #define VMCF_OP2 2 #define VMCF_OPMASK 3 #define VMCF_BYTEMODE 4 #define VMCF_JUMP 8 #define VMCF_PROC 16 #define VMCF_USEFLAGS 32 #define VMCF_CHFLAGS 64 static byte VM_CmdFlags[]= { /* VM_MOV */ VMCF_OP2 | VMCF_BYTEMODE , /* VM_CMP */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_ADD */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_SUB */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_JZ */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_JNZ */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_INC */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_DEC */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_JMP */ VMCF_OP1 | VMCF_JUMP , /* VM_XOR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_AND */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_OR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_TEST */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_JS */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_JNS */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_JB */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_JBE */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_JA */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_JAE */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS , /* VM_PUSH */ VMCF_OP1 , /* VM_POP */ VMCF_OP1 , /* VM_CALL */ VMCF_OP1 | VMCF_PROC , /* VM_RET */ VMCF_OP0 | VMCF_PROC , /* VM_NOT */ VMCF_OP1 | VMCF_BYTEMODE , /* VM_SHL */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_SHR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_SAR */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_NEG */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS , /* VM_PUSHA */ VMCF_OP0 , /* VM_POPA */ VMCF_OP0 , /* VM_PUSHF */ VMCF_OP0 | VMCF_USEFLAGS , /* VM_POPF */ VMCF_OP0 | VMCF_CHFLAGS , /* VM_MOVZX */ VMCF_OP2 , /* VM_MOVSX */ VMCF_OP2 , /* VM_XCHG */ VMCF_OP2 | VMCF_BYTEMODE , /* VM_MUL */ VMCF_OP2 | VMCF_BYTEMODE , /* VM_DIV */ VMCF_OP2 | VMCF_BYTEMODE , /* VM_ADC */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS , /* VM_SBB */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS , /* VM_PRINT */ VMCF_OP0 };