Sono interessato ad apprendere come funziona realmente una macchina virtuale / sandbox. Ho sviluppato un emulatore 8051 e ho anche scritto un disassemblatore per x86, quindi questa parte di una macchina virtuale non è realmente il problema. Quello che mi interessa, è la funzionalità sandbox di esso. Per illustrare cosa intendo consideri questo esempio.
Supponiamo di avere una funzione che apre semplicemente un file. Quindi niente di speciale.
int fd = open(path);
Ora, quando questo codice viene eseguito in modo nativo, andrà al sistema operativo e aprirà il file (supponendo che esista). Ora quando lo eseguo in un ambiente di macchina virtuale, il percorso specificato non è quello che vede il sistema operativo, ma piuttosto qualcosa che la VM sostituirà, reindirizzando così la chiamata aperta. Quindi quello che mi interessa è come una VM può fare ciò, quando il codice eseguito viene eseguito in modo nativo (come x86 su un x86) perché per una VM interpretata è piuttosto ovvio.
Quando cerco google per macchine virtuali, trovo solo link che parlano di interpreti come Java, LLVM o simili, ma nulla di ciò che è più dettagliato. Ho scaricato il codice sorgente da Oracle Virtual Box, ma dal momento che si tratta di una base di codice piuttosto grande, è piuttosto difficile capire che il concetto si stia semplicemente scavando in quel codice.