The M/o/Vfuscator (short ‘o’, sounds like “mobfuscator”) helps programs compile into only mov instructions, and nothing else – no cheating. Arithmetic, comparisons, jumps, function calls, and everything else a program needs are all performed through mov operations; there is no self-modifying code, no transport-triggered calculation, and no other form of non-mov cheating.
The compiler currently targets the C programming language and x86 processor architecture, but is easily adaptable to other languages and architectures.
Usage
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
--mov-id Add reference instructions for each basic block to assist debugging. --no-mov-id Do not add reference instructions. This is the default. --mov-flow Use mov instructions in implementing control flow. This is the default. --no-mov-flow Use jmp instructions in implementing control flow. This will substantially speed up execution in larger projects. --mov-extern Use mov instructions to implement external function calls. This is the default. --no-mov-extern Use jmp instructions to implement external function calls. This is useful for debugging. --mov-loop Use mov instructions to implement the primary execution loop. This is the default. --no-mov-loop Use jmp instructions to implement the primary execution loop. This is useful for debugging. --crt0 Build the M/o/Vfuscator crt0 library (_start routines). --crtf Build the M/o/Vfuscator crtf library (primary execution loop routines). --crtd Build the M/o/Vfuscator crtd library (data tables). --crt Same as --crt0 --crtf --crtd. |
The inspiration for the compiler is the paper “mov is Turing-complete“, by Stephen Dolan.
You can download M/o/Vfuscator2 here:
Or read more here.