Stento ancora a credere a quello che è riuscito a fare Fabrice Bellard (l'autore di FFmpeg e QEMU) utilizzando solo ed esclusivamente JavaScript. È riuscito a creare una macchina virtuale in puro JavaScript in grado di emulare l'architettura di un processore x86 a 32 bit. Successivamente, utilizzando la lettura dei file binari consentita da AJAX è riuscito a far partire un VERO kernel linux sulla sua macchina virtuale, avviare il processo di startup e caricare la shell.
Il tutto è pubblicato online qui: http://bellard.org/jslinux/.
Purtroppo il codice è volutamente offuscato (ovvero reso piuttosto illegibile senza un lungo lavoro di "analisi"). In ogni caso, qualora ci fosse qualche curios@ che volesse studiarselo, può intanto tranquillamente farlo girare offline scaricandosi tutti questi file e mettendoli sotto un'unica directory:
[ cpux86-std.js | cpux86-ta.js | cpux86.js | faq.html | hda000000000.bin | hda000000003.bin | hda000000007.bin | hda000000131.bin | hda000000256.bin | hda000000336.bin | hda000000387.bin | hda000000464.bin | hda000000465.bin | hda000000466.bin | hda000000467.bin | hda000000468.bin | hda000000469.bin | hda000000470.bin | hda000000471.bin | hda000000472.bin | hda000000473.bin | hda000000474.bin | hda000000475.bin | hda000000512.bin | hda000000589.bin | hda000000592.bin | hda000000643.bin | hda000000644.bin | hda000000691.bin | hda000000697.bin | hda000000708.bin | hda000000720.bin | hda000000769.bin | hda000000775.bin | hda000000776.bin | hda000000777.bin | hda000000778.bin | hda000000779.bin | hda000000781.bin | hda000000792.bin | index.html | jslinux.js | linuxstart-20120111.tar.gz | linuxstart.bin | news.html | tech.html | term.js | utils.js | vmlinux-2.6.20.bin ]
(la pagina principale è index.html ovviamente)
Il passo successivo sarà rendere leggibili i file .js "offuscati" (il metodo migliore è incollarne il codice qui: http://jsbeautifier.org/ – è un ottimo tool per formattare il codice).
Fin qui è un attimo e la macchina gira. Il passo ulteriore però sarà lo studio vero e proprio, che comporterà un lento commento del codice e la rinominazione delle variabili. Insomma, buon lavoro.
A che scopo tutto ciò? Lui dice (e probabilmente è vero) di averlo fatto per passatempo. Ma c'è già chi ci sta lavorando su per trasformarlo in una "game box" in grado di caricare i vecchi giochi DOS e non solo.
Quando dico che JavaScript è un linguaggio non ancora compreso fino in fondo…![]()
![]()