Dovrai scrivere il tuo compilatore.
Considera:nessun sistema operativo normale supporta ciò che desideri. Vuoi che entrambi gli eseguibili vengano eseguiti all'interno di un singolo processo, tuttavia quel processo potrebbe o meno effettuare chiamate al sistema operativo a seconda di alcune stranezze all'interno del processo che il sistema operativo non comprende affatto.
Questo non è più un problema con il tuo compilatore personalizzato, poiché semplicemente non creerà le istruzioni offensive. È simile a Java e .Net, che impediscono anche tali chiamate del sistema operativo al di fuori del loro controllo.
Una soluzione portatile:Google Native Client
Una possibile soluzione Linux:
- Crea il profilo AppArmor con "cappelli" (un "cappello" è una configurazione sandbox a cui l'applicazione può passare in modo programmatico con libapparmor),
- fare in modo che l'applicazione principale crei una "pipe",
- hanno l'applicazione principale "fork",
- cambia in un "cappello" corrispondente all'applicazione figlio,
- "exec" l'applicazione figlio,
- l'applicazione principale e l'applicazione figlia comunicano tramite la "pipe" creata in precedenza.