I have to question what you are hoping to accomplish by virtualising the architechture?
If its for scripting, call it an interpreter, if its for cross platform compatibility that should be attacked in the compiler stage.
If you hoping to do things like restricting access, there are generally built in options to prevent escalation, but know that a jtag interface can generally peer inside and see what your actually doing, and may help who your fighting to peel back what your doing.
On my cortex 3 arm i do run 2 scripting language interpreters with a reduced syntax, This was easier for me that bytecode packages, as in the parsing stage i am able to detect errors, write back where they, and it means that all parts of the method is sanitized. It also reduced my R&D time as i only had to edit a text file script on an sd card, rather than recompiling the entire micro's software.