Reflection allows a language to inspect and alter its own execution and state.
High-level languages typically run on top of VMs which have been built to create an abstraction layer over hardware.
Reflection is generally limited to the language-side.
In several research VMs it is possible to reflectively modify VM components from language-side.
In this dissertation we strive for a unified language-runtime or self-aware VM.
Instead of looking for a holistic solution we focus on a minimal approach on top of an existing VM.
We first present Benzo our framework for dynamic native code activation.
Benzo provides a generic low-level interface to the VM internals.
Based on this framework we evaluate several applications that typically require direct VM support.
We show first how to build an efficient FFI interface, allowing for a more structured access to VM internal functions.
To evaluate the limitations of Benzo we target two more applications: dynamic primitives and a language-side JIT compiler.