Simple virtual machine project for learning Rust!
./rustyvm <path-to-program>
Rusty VM use section-based memory manager. Every section determines by it's base address and size. Thats why there is no segment registers. Program can allocate/deallocate memory throw syscall.
When you constructing shellcode, memory manager always will allocate two sections: one for shellcode and one for stack.
- Bytecode execution
- Arithmetic opcodes (add, sub, not, xor, shl, shr, etc.)
- Memory mapping (stack, heap, etc.)
- Memory opcodes (mov)
- Control flow opcodes (cmp, jmp, je, jne, jge, etc.)
- Program format and loader
- Interrupts/Syscalls (int)
- Machine has 256 64-bit register
- You can do any operation with any register
- Some registers has special meaning (instruction pointer, stack pointer, etc)
- Flags register can not be accesed by machine operations
- Now sections don't have access flags, but it could be added in the future