tl;dr
- The VM takes a custom binary as input
 - Binary contains function table, code and bss sections
 - Code can overlap with bss and be modified at runtime
 - The JIT compiler assumes that a function is safe since it ran many times
 - Functions modified right before JIT bypass security checks