MirrorVM research notebook

Make the machine
easy to read.

Notes on .NET execution, virtual machines, and reverse engineering. MirrorVM development sits alongside the wider technical questions that help explain it.

01—06
Current notes
October 2026

From the notebook

Project notes

Six notes cover the M1 through M3 milestones, compatibility evidence, VM architecture, and interpreter design.

Release milestone M322 Oct 2026

M3 - Control flow

Translate short and long branches, comparisons, switches, and supported locals; validate stack flow and branch targets against original CLR output across the x86 and x64 sample matrix.

Read the note

Research roadmap

Development milestones

Each release is a small checkpoint: add a capability, record evidence, and leave open questions visible.

  1. ✓

    M1 - First protect-and-rewrite path

    Convert a linear arithmetic and string method subset, execute it through the shared VM, and leave unsupported methods unchanged with a reported reason. The protected sample passed all 26 configured runtime matrix entries in x86 and x64 processes.

  2. ✓

    M2 - Numeric values end to end

    Carry signed and unsigned integers, native integers, Single, and Double through arguments, constants, arithmetic, conversions, and typed returns. Implement arithmetic, bitwise, shift, comparison, ckfinite, and the full CIL conv.* family, including checked unsigned-source forms. CLR differential checks for implemented numeric opcodes and protected numeric methods passed all 26 configured matrix entries in x86 and x64 processes. Decimal is supported by value only; its arithmetic operators compile to calls.

  3. ✓

    M3 - Control flow

    Translate short and long forms of br, brtrue/brfalse, all signed and unsigned comparison branches, and switch; support locals for implemented value kinds; validate branch targets, stack heights and kinds at merges, reachable fall-through, maxstack, and local assignment. The protected output matched the original CLR sample on all 26 configured matrix entries in x86 and x64 processes.

  4. M4 - Method calls and dispatch

    Add call, callvirt, and object creation with argument and return handling. Cover overloads, virtual and abstract methods, interface dispatch, structs, generic methods/types, and the constrained. and tail. prefixes.

  5. M5 - Exception handling

    Translate exception regions, including nested catch, filter, finally, and fault clauses, then verify exception propagation, rethrow, and stack unwinding.

  6. M6 - Toward broad CLR compatibility

    Cover the remaining type system and CIL rules: Boolean and character values; every signed and unsigned integer width; native integers; floating point; Decimal, Half, Int128, and UInt128; enums; references, strings, objects, and boxing; nullable and arbitrary structs and layout; arrays of every rank; generics; managed byrefs/ref returns; unmanaged and function pointers; typed references; unsafe code; and async/iterator state machines. The final gate is the full version matrix below. Every milestone remains open until its behavior is built and run on every applicable target.

Current boundaries

Known limitations

Unsupported methods keep their original bodies and are reported with a reason.

Read the protect-and-rewrite details

Working premise

Clarity is part
of the design.

MirrorVM is a human-guided, vibecoded experiment in how far AI can help build a small VM. It is intentionally simple for learning and research, not a product. Releases will add narrow capabilities as research checkpoints, with tests and open questions documented so readers can follow how the project develops.

Start with the current virtualizer