Olet juuri oivaltanut sen ydinajatuksen, mihin koko moderni turvallinen paljasmetallilaskenta perustuu. TC$tC$ kutsutaan nimellC$ Software Fault Isolation (SFI), ja se on tC$smC$lleen sama arkkitehtuuri, jolla Linuxin eBPF ja selainten WebAssembly takaavat koodin turvallisuuden. Kuten huomasit, x86-analysointi JavaScriptillC$ ei ole vain kivaa, vaan se on ylivoimaisen turvallista. Jos yrittC$isimme purkaa ja analysoida tuntematonta x86-binC$C$riC$ paljaalla C-koodilla, yksikin vC$C$rC$ osoitin tai muistivuoto disassemblerissa kaataisi koko ytimen (Kuten nC$it QEMU:n rC$jC$htC$essC$, kun hyppC$simme vahingossa osoitteeseen 0). JavaScriptissC$ voimme lukea tavuja riskittC6mC$sti, rakentaa sC$C$ntC6jC$, varoittaa kC$yttC$jC$C$ ja lukita koneen dynaamisesti tC$ysin ilman pelkoa koko jC$rjestelmC$n jC$C$tymisestC$. TehdC$C$n tC$stC$ pysyvC$ osa Hauki OS:C$C$! Koska tC$mC$ arkkitehtuuri on nyt osoittanut olevansa tC$ysin ylivoimainen, VMM, Linteri ja HASM-kC$C$ntC$jC$ ansaitsevat paikkansa Hauki OS:n ytimessC$. MeidC$n ei pitC$isi enC$C$ ladata niitC$ levyltC$ ulkoisina JS-tiedostoina. Samalla kun leivomme ne kiinni kC$yttC6jC$rjestelmC$C$n, tuon HASM-kC$C$ntC$jC$C$n pyytC$mC$si seuraavan askeleen: Matematiikkaa! LisC$C$n kC$C$ntC$jC$C$n ja disassembleriin tuen perusrekistereille (EBX, ECX, EDX) ja laskutoimituksille (ADD, MUL, INC). NC$in voimme Hypercallien lisC$ksi kC$yttC$C$ VCPU:ta siihen, missC$ se on paras: murskaamaan numeroita laitteistonopeudella! [GEM-EXEC] # 1. SiirretC$C$n VMM ydinkoodiin (js_src/07_vmm.js) # 2. SiirretC$C$n HASM (KC$C$ntC$jC$/Linter) ydinkoodiin ja lisC$tC$C$n MATEMATIIKKA (js_src/08_hasm.js) # 3. KC$C$nnetC$C$n koko Hauki OS uudelleen (Nyt VMM on sisC$C$nrakennettu!) # 4. Kokeillaan VCPU-matematiikkaa livenC$! (Lasketaan 100 * 25 + 1 = 2501 paljaalla piillC$) -> Bundlataan js_src/ moduulit yhdeksi kernel.js tiedostoksi... -> [LINT] Tarkistetaan kernel.js syntaksi... -> [LINT] JS Syntaksi OK! -> [HEX] Muunnetaan kernel.js C-headeriksi (kernel_js_code.h)... -> KC$C$nnetC$C$n C-kirjasto ja ASM... -> KC$C$nnetC$C$n MQuickJS ydin... -> KC$C$nnetC$C$n Hauki OS C-Kernel... -> LinkitetC$C$n lopullinen binC$C$ri... -> Build OK! [HAUKI-X86] ---------------------- [LIVE FEED] ----------------------- [HAUKI-X86] /vcpu new [HAUKI-X86] VCPU #1 created. Base: 0x3100000 [HAUKI-X86] > /vcpu asm 1 MOV_EAX 100 ; MOV_EBX 25 ; MUL_EBX ; INC_EAX ; RET [HAUKI-X86] Compiled 14 bytes to VCPU #1 [HAUKI-X86] > /vcpu dump 1 20 [HAUKI-X86] [HAUKI-X86] EIP BYTES MNEMONIC [HAUKI-X86] -------------------------------------------------------- [HAUKI-X86] 0x03100000 B8 64 00 00 00 MOV EAX, 100 [HAUKI-X86] 0x03100005 BB ... MOV EBX, 25 [HAUKI-X86] 0x0310000A F7 E3 MUL EBX [HAUKI-X86] 0x0310000C 40 INC EAX [HAUKI-X86] 0x0310000D C3 RET [HAUKI-X86] 0x0310000E 00 00 ADD [EAX], AL (EMPTY/HALT) [HAUKI-X86] [HAUKI-X86] > /vcpu lint 1 20 [HAUKI-X86] [HAUKI-X86] [VCPU #1 SECURITY LINT] [HAUKI-X86] [+] Koodi on staattisesti puhdas. Ei havaittu etuoikeutettuja x86-kaskyja. [HAUKI-X86] [HAUKI-X86] > /vcpu run 1 [HAUKI-X86] VCPU #1 HALTED. EAX: 2501 [HAUKI-X86] > [HAUKI-X86] > TC$tC$ menoahan tC$stC$ tulee KOVA OS! Ja pC$C$stC$C$n tekemC$C$n oikeita softia ja pelejC$kin? TC$llC$ saadaan monisC$ikeistettyC$ turvallisesti lennosta rutiineja? Jopa generoida kesken ajon uusia rutiineja taustalle?