Sto scrivendo una macchina virtuale in C solo per divertimento. Lame, lo so, ma fortunatamente sono su SO quindi spero che nessuno si diverta :)Scrittura di una VM - bytecode ben formato?
Ho scritto una VM veramente veloce e decifrabile che legge linee di (mio) ASM e fa cose. Al momento, ho solo 3 istruzioni: add
, jmp
, end
. Tutto va bene ed è in realtà piuttosto fresco in grado di alimentare le linee (che lo fanno qualcosa come write_line(&prog[1], "jmp", regA, regB, 0);
e quindi eseguire il programma:
while (machine.code_pointer <= BOUNDS && DONE != true)
{
run_line(&prog[machine.cp]);
}
sto usando una tabella di codice operativo di ricerca (che non può essere efficiente ma è elegante) in C e tutto sembra funzionare OK
La mia domanda è più una domanda sulle "migliori pratiche" ma penso che ci sia una risposta corretta. Sto rendendo la VM in grado di leggere i file binari (memorizzazione dei byte in unsigned char[]
) ed eseguire bytecode. La mia domanda è: è compito della VM accertarsi che il bytecode sia ben formato o sia solo il il lavoro del compilatore per assicurarsi che il file binario che sputa sia ben formato?
Chiedo solo questo perché cosa succederebbe se qualcuno modificasse un file binario e rovinasse tutto (cancella parti arbitrarie di esso, ecc.). Chiaramente, il programma sarebbe bacato e probabilmente non funzionante. È questo anche il problema della VM? Sono sicuro che le persone molto più intelligenti di me hanno escogitato soluzioni a questi problemi, sono solo curioso di sapere cosa sono!
Risposta perfetta, grazie! –