QEMU.js: ืื™ืฆื˜ ืขืจื ืกื˜ ืื•ืŸ ืžื™ื˜ ื•ื•ืึทืกื

ืึทืžืึธืœ ืื•ื™ืฃ ืึท ืฆื™ื™ึทื˜ ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืคึฟืึทืจ ืฉืคึผืึทืก ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืจื™ื•ื•ืขืจืกืึทื‘ื™ืœื™ื˜ื™ ืคื•ืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืื•ืŸ ืœืขืจื ืขืŸ ื•ื•ื™ ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ (ืžืขืจ ื’ืขื ื•ื™, Asm.js) ืคึฟื•ืŸ ืžืึทืฉื™ืŸ ืงืึธื“. QEMU ืื™ื– ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ืคึฟืึทืจ ื“ืขืจ ืขืงืกืคึผืขืจื™ืžืขื ื˜, ืื•ืŸ ืขื˜ืœืขื›ืข ืžืึธืœ ืฉืคึผืขื˜ืขืจ ืึทืŸ ืึทืจื˜ื™ืงืœ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขืฉืจื™ื‘ืŸ ืื•ื™ืฃ ื”ื‘ืจ. ืื™ืŸ ื“ื™ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ืึทื“ื•ื•ื™ื™ื–ื“ ืฆื• ืจื™ืžื™ื™ืง ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™, ืื•ืŸ ืืคื™ืœื• ืคืึทืจืœืึธื–ืŸ ื–ื™ืš ื›ึผืžืขื˜ ืคืึทืจื˜ื™ืง ืื™ืš ื”ืื‘ ืขืคืขืก ื ื™ืฉื˜ ื’ืขื•ื•ืืœื˜ ื“ื™ ืคืจืื™ืขืงื˜... ื“ื™ ืืจื‘ืขื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ืื ื’ืขื’ืื ื’ืขืŸ, ืื‘ืขืจ ื–ื™ื™ืขืจ ืœืื ื’ื–ืื, ืื•ืŸ ื™ืขืฆื˜, ืœืขืฆื˜ื ืก ืื™ืŸ ื™ืขื ืขื ืืจื˜ื™ืงืœ ืื™ื– ืืจื•ื™ืก ืงืึธืžืขื ื˜ืึทืจ ืื•ื™ืฃ ื“ืขืจ ื˜ืขืžืข "ืื–ื•ื™ ื•ื•ื™ ื”ืื˜ ืขืก ืึทืœืข ืกื•ืฃ?" ืื™ืŸ ืขื ื˜ืคืขืจ ืฆื• ืžื™ื™ืŸ ื“ื™ื˜ื™ื™ืœื“ ืขื ื˜ืคืขืจ, ืื™ืš ื’ืขื”ืขืจื˜ "ื“ืึธืก ืกืึธื•ื ื“ืก ื•ื•ื™ ืึทืŸ ืึทืจื˜ื™ืงืœ." ื ื•, ืื•ื™ื‘ ืื™ืจ ืงืขื ืขืŸ, ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทืŸ ืึทืจื˜ื™ืงืœ. ืืคึฟืฉืจ ืขืžืขืฆืขืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ืขืก ื ื•ืฆื™ืง. ื“ืขืจ ืœื™ื™ืขื ืขืจ ื•ื•ืขื˜ ืœืขืจื ืขืŸ ืขื˜ืœืขื›ืข ืคืืงื˜ืŸ ื•ื•ืขื’ืŸ ื“ื™ ืคึผืœืึทืŸ ืคื•ืŸ ื‘ืึทืงืขื ื“ื– ืคื•ืŸ QEMU ืงืึธื“ ื“ื•ืจ, ื•ื•ื™ ืื•ื™ืš ื•ื•ื™ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึท ืคึผื•ื ืงื˜-ืื™ืŸ-ืฆื™ื™ื˜ ืงืึทืžืคึผื™ื™ืœืขืจ ืคึฟืึทืจ ืึท ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ื˜ืึทืกืงืก

ื–ื™ื ื˜ ืื™ืš ื”ืื‘ ืฉื•ื™ืŸ ื’ืขืœืขืจื ื˜ ื•ื•ื™ ืฆื• "ืขืคืขืก" ืคึผืึธืจื˜ QEMU ืฆื• ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜, ื“ืึธืก ืžืึธืœ ืขืก ืื™ื– ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื˜ืึธืŸ ืขืก ื•ื•ื™ื™ื–ืœื™ ืื•ืŸ ื ื™ืฉื˜ ืื™ื‘ืขืจื—ื–ืจืŸ ืึทืœื˜ ืžื™ืกื˜ื™ื™ืงืก.

ื˜ืขื•ืช ื ื•ืžืขืจ ืื™ื™ืŸ: ืฆื•ื•ื™ื™ึทื’ ืคึฟื•ืŸ ืคื•ื ื˜ ืžืขืœื“ื•ื ื’

ืžื™ื™ึทืŸ ืขืจืฉื˜ืขืจ ื’ืจื™ื™ึทื– ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ื’ืึธืคึผืœ ืžื™ื™ืŸ ื•ื•ืขืจืกื™ืข ืคึฟื•ืŸ ื“ื™ ืึทืคึผืกื˜ืจื™ื ื•ื•ืขืจืกื™ืข 2.4.1. ื“ืขืจื ืึธืš ืขืก ื’ืขื•ื•ืขืŸ ืฆื• ืžื™ืจ ืึท ื’ื•ื˜ืข ื’ืขื“ืึทื ืง: ืื•ื™ื‘ ืคื•ื ื˜ ืžืขืœื“ื•ื ื’ ื™ื’ื–ื™ืกืฅ, ืขืก ืื™ื– ืžื™ืกื˜ืึธืžืข ืžืขืจ ืกื˜ืึทื‘ื™ืœ ื•ื•ื™ ืคึผืฉื•ื˜ 2.4, ืื•ืŸ ืืคื™ืœื• ืžืขืจ ืึทื–ื•ื™ ื“ื™ ืฆื•ื•ื™ื™ึทื’ master. ืื•ืŸ ื–ื™ื ื˜ ืื™ืš ืคึผืœืึทื ื ืขื“ ืฆื• ืœื™ื™ื’ืŸ ืึท ืฉื™ื™ืŸ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืžื™ื™ืŸ ืื™ื™ื’ืขื ืข ื‘ืึทื’ื–, ืื™ืš ื”ืื˜ ื ื™ื˜ ื“ืึทืจืคึฟืŸ ื•ื•ืขืจ ืขืก ื™ื– ืึทื ื“ืขืจืฉ. ืื–ื•ื™ ื”ืื˜ ื–ื™ืš ืžืกืชืžื ืื•ื™ืกื’ืขื–ืขืŸ. ืื‘ืขืจ ื“ืึธ ืื™ื– ื“ื™ ื–ืึทืš: QEMU ื˜ื•ื˜ ื ื™ืฉื˜ ืฉื˜ื™ื™ืŸ ื ืึธืš, ืื•ืŸ ืื™ืŸ ืขื˜ืœืขื›ืข ืคื•ื ื˜ ื–ื™ื™ ืืคื™ืœื• ืžื•ื“ื™ืข ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืงืึธื“ ื“ื•ืจืš 10 ืคึผืจืึธืฆืขื ื˜. "ื™ืึธ, ืื™ืฆื˜ ืื™ืš ื‘ื™ืŸ ื’ืขื’ืื ื’ืขืŸ ืฆื• ืคืจื™ืจืŸ," ืื™ืš ื’ืขื“ืึทื ืง ืื•ืŸ ืฆืขื‘ืจืื›ืŸ. ื“ืึธ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทื›ืŸ ืึท ื“ื™ื’ืจืขืฉืึทืŸ: ืจืขื›ื˜ ืฆื• ื“ืขืจ ืื™ื™ืŸ-ื˜ืจืขื“ื™ื“ ื ืึทื˜ื•ืจ ืคื•ืŸ QEMU.js ืื•ืŸ ื“ื™ ืคืึทืงื˜ ืึทื– ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ QEMU ื˜ื•ื˜ ื ื™ืฉื˜ ืžื™ื™ื ืขืŸ ื“ื™ ืคืขืœืŸ ืคื•ืŸ ืžื•ืœื˜ื™-ื˜ืจืขื“ื™ื ื’ (ื“ืึธืก ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ ืึทืจื‘ืขื˜ืŸ ืขื˜ืœืขื›ืข ืึทื ืจื™ืœื™ื™ื˜ื™ื“ ืงืึธื“ ืคึผืึทื˜ืก, ืื•ืŸ ื ื™ื˜ ื ืึธืจ "ื ื•ืฆืŸ ืึทืœืข ืงืขืจื ืึทืœื–") ืื™ื– ืงืจื™ื˜ื™ืฉ ืคึฟืึทืจ ืขืก, ื“ื™ ื”ื•ื™ืคึผื˜ ืคืึทื ื’ืงืฉืึทื ื– ืคื•ืŸ ืคึฟืขื“ืขื ืื™ืš ื’ืขื”ืื˜ ืฆื• "ืงืขืจืŸ ืขืก ืื•ื™ืก" ืฆื• ืงืขื ืขืŸ ืจื•ืคืŸ ืคื•ืŸ ืึทืจื•ื™ืก. ื“ืึธืก ื”ืึธื˜ ื‘ืืฉืืคืŸ ืขื˜ืœืขื›ืข ื ืึทื˜ื™ืจืœืขืš ืคึผืจืึธื‘ืœืขืžืก ื‘ืขืฉืึทืก ื“ื™ ืžืขืจื“ื–ืฉืขืจ. ืึธื‘ืขืจ, ื“ืขืจ ืคืึทืงื˜ ืึทื– ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืขื ื“ืขืจื•ื ื’ืขืŸ ืคื•ืŸ ื“ื™ ืฆื•ื•ื™ื™ึทื’ master, ืžื™ื˜ ื•ื•ืึธืก ืื™ืš ื’ืขืคืจื•ื•ื•ื˜ ืฆื• ืฆื•ื ื•ื™ืคื’ื™ืกืŸ ืžื™ื™ืŸ ืงืึธื“, ื–ืขื ืขืŸ ืื•ื™ืš ืงืึทืจืฉ ืคึผื™ืงื˜ ืื™ืŸ ื“ื™ ืคื•ื ื˜ ืžืขืœื“ื•ื ื’ (ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ืื™ืŸ ืžื™ื™ืŸ ืฆื•ื•ื™ื™ึทื’) ืื•ื™ืš ืžื™ืกื˜ืึธืžืข ื•ื•ืึธืœื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืฆื•ื’ืขืœื™ื™ื’ื˜ ืงืึทื ื•ื•ื™ื ื™ืึทื ืก.

ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืึทื– ืขืก ื ืึธืš ืžืื›ื˜ ื–ื™ื ืขืŸ ืฆื• ื•ื•ืึทืจืคืŸ ื“ื™ ืคึผืจืึธื•ื˜ืึทื˜ื™ื™ืคึผ, ื“ื™ืกืึทืกืขืžื‘ืึทืœ ืขืก ืคึฟืึทืจ ื˜ื™ื™ืœืŸ ืื•ืŸ ื‘ื•ื™ืขืŸ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคึฟื•ืŸ ืงืจืึทืฆืŸ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืขืคึผืขืก ืคืจื™ืฉืขืจ ืื•ืŸ ืื™ืฆื˜ ืคึฟื•ืŸ master.

ื˜ืขื•ืช ื ื•ืžืขืจ ืฆื•ื•ื™ื™: TLP ืžืขื˜ืึทื“ืึทืœืึทื“ื–ืฉื™

ืื™ืŸ ืขืกืึทื ืก, ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึท ื’ืจื™ื™ึทื–, ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืขืก ืื™ื– ื ืึธืจ ืึท ืฉื˜ืจื™ืš ืคื•ืŸ ืฉืึทืคึฟืŸ ืึท ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ ื˜ื ืึธื™ื ืคื•ืŸ ื’ืึทื ืฅ ืžื™ืกืึทื ื“ืขืจืกื˜ืึทื ื“ื™ื ื’ ืคื•ืŸ ื‘ื™ื™ื“ืข "ื•ื•ื• ืื•ืŸ ื•ื•ื™ ืฆื• ืจื™ืจืŸ?" ืื•ืŸ ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ "ื•ื•ืขื˜ ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื“ืึธืจื˜?" ืื™ืŸ ื“ื™ ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ ืœืขืคึผื™ืฉ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื’ืขืจืขื›ื˜ืคืืจื˜ื™ืงื˜ ืึธืคึผืฆื™ืข, ืึธื‘ืขืจ, ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ืื™ืš ื”ืื˜ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ืื™ื‘ืขืจื—ื–ืจืŸ ืขืก ืึทื ื ืขืกืึทืกืขืจืึทืœื™. ื“ืึธืก ืžืึธืœ ื”ืึธื‘ ืื™ืš ื“ืึธืก ื’ืขื•ื•ืึธืœื˜ ื˜ืึธืŸ ืžื™ื˜ ื—ื›ืžื”: ืึทื˜ืึธืžื™ืฉืข ืงืึธืžืžื™ื˜ืก, ื‘ืึทื•ื•ืื•ืกื˜ื–ื™ื ื™ืงืข ืงืึธื“ืขื ื“ืขืจื•ื ื’ืขืŸ (ืื•ืŸ ื ื™ืฉื˜ "ืฆื•ื–ืึทืžืขื ืฉื˜ืขืœืŸ ื˜ืจืึทืค-ื›ืึทืจืึทืงื˜ืŸ ื‘ื™ื– ืขืก ืื™ื– ืฆื•ื ื•ื™ืคื’ืขืฉื˜ืขืœื˜ (ืžื™ื˜ ื•ื•ืึธืจื ื™ื ื’ื–)", ื•ื•ื™ ืœื™ื ื•ืก ื˜ืึธืจื•ื•ืึทืœื“ืก ื”ืึธื˜ ืึทืžืึธืœ ื’ืขื–ืึธื’ื˜ ื•ื•ืขื’ืŸ ืขืžืขืฆืŸ, ืœื•ื™ื˜ ื•ื•ื™ืงื™ืงื•ื•ืึธื˜), ืืื–"ื•ื•.

ื˜ืขื•ืช ื ื•ืžืขืจ ื“ืจื™ื™: ืืจื™ื™ื ื’ื™ื™ืŸ ืื™ืŸ ื•ื•ืืกืขืจ ืืŸ ืฆื• ื•ื•ื™ืกืŸ ื“ืขื ืคืืจื“

ืื™ืš ื‘ื™ืŸ ื ืืš ื ื™ืฉื˜ ืื™ื ื’ืื ืฆืŸ ื‘ืืคืจื™ื™ืขืŸ ืคื•ืŸ ื“ืขื, ืื‘ืขืจ ื™ืขืฆื˜ ื”ืื‘ ืื™ืš ื‘ืืฉืœืืกืŸ ื‘ื›ืœืœ ื ื™ืฉื˜ ื ืื›ืฆื•ื’ื™ื™ืŸ ื“ืขื ื•ื•ืขื’ ืคื•ืŸ ืงืœืขื ืกื˜ืขืจ ื•ื•ื™ื“ืขืจืฉื˜ืื ื“ ืื•ืŸ ืขืก ื˜ื•ื”ืŸ "ืืœืก ื ื“ืขืจื•ื•ืืงืกืขื ืขืจ", ื“ืืก ื”ื™ื™ืกื˜ ืฉืจื™ื™ื‘ืŸ ืžื™ื™ืŸ TCG ื‘ืขืงืขื ื“ ืคื•ืŸ ืืžืืœ, ื›ื“ื™ ื ื™ืฉื˜ ืฆื• ื”ืึธื‘ืŸ ืฆื• ื–ืึธื’ืŸ ืฉืคึผืขื˜ืขืจ, "ื™ืึธ, ื“ืึธืก ืื™ื– ืคื•ืŸ ืงื•ืจืก, ืกืœืึธื•ืœื™, ืึธื‘ืขืจ ืื™ืš ืงืขืŸ ื ื™ืฉื˜ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึทืœืฅ - ื“ืึธืก ืื™ื– ื•ื•ื™ TCI ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ..." ื“ืขืจืฆื•, ื“ืึธืก ื˜ื›ื™ืœืขืก ื’ืขื•ื•ืขืŸ ื•ื•ื™ ืึท ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ืœื™ื™ื–ื•ื ื’, ื–ื™ื ื˜ ืื™ืš ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื‘ื™ื™ื ืขืจื™ ืงืึธื“. ืฐื™ ื–ืึธื’ื˜ ืžืขืŸ: โ€žื’ืขื ืขื ื˜ ื”ืึธื˜ ื–ื™ืš ืืฒึทื ื’ืขื–ืึทืžืœื˜ัƒ, ืึธื‘ืขืจ ื ื™ืฉื˜ ืึทื– ืื™ื™ื ืขืจ": ื“ืขืจ ืงืึธื“ ืื™ื–, ืคื•ืŸ ืงื•ืจืก, ื‘ื™ื™ื ืขืจื™, ืึธื‘ืขืจ ืงืึธื ื˜ืจืึธืœ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืคืฉื•ื˜ ื˜ืจืึทื ืกืคืขืจื“ ืฆื• ืขืก - ืขืก ืžื•ื–ืŸ ื–ื™ื™ืŸ ื‘ืคื™ืจื•ืฉ ืคึผื•ืฉื˜ ืื™ืŸ ื“ืขื ื‘ืœืขื˜ืขืจืขืจ ืคึฟืึทืจ ื–ืึทืžืœื•ื ื’, ืจื™ื–ืึทืœื˜ื™ื ื’ ืื™ืŸ ืึท ื–ื™ื›ืขืจ ื›ื™ื™ืคืขืฅ ืคื•ืŸ ื“ื™ JS ื•ื•ืขืœื˜, ื•ื•ืึธืก ื ืึธืš ื“ืึทืจืฃ ืฆื• ืขืจื’ืขืฅ ื’ืขืจืื˜ืขืฐืขื˜ ืฐืขืจืŸ. ืึธื‘ืขืจ, ืื•ื™ืฃ ื ืึธืจืžืึทืœ RISC ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจื–, ื•ื•ื™ ื•ื•ื™ื™ึทื˜ ื•ื•ื™ ืื™ืš ืคึฟืึทืจืฉื˜ื™ื™ืŸ, ืึท ื˜ื™ืคึผื™ืฉ ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ื“ื™ ื ื•ื™ื˜ ืฆื• ื‘ืึทืฉื˜ืขื˜ื™ืง ื“ื™ ื™ื ืกื˜ืจื•ืงื˜ื™ืึธืŸ ืงืึทืฉ ืคึฟืึทืจ ืจื™ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื“ ืงืึธื“ ื‘ืคื™ืจื•ืฉ - ืื•ื™ื‘ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื•ื•ืึธืก ืžื™ืจ ื“ืึทืจืคึฟืŸ, ืื™ืŸ ืงื™ื™ืŸ ืคืึทืœ, ืขืก ืื™ื– ื ืึธืขื ื˜. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ืคึฟื•ืŸ ืžื™ื™ืŸ ืœืขืฆื˜ืข ืคึผืจื•ื•ื•ืŸ, ืื™ืš ื’ืขืœืขืจื ื˜ ืึทื– ืงืึธื ื˜ืจืึธืœ ืื™ื– ื ื™ืฉื˜ ื˜ืจืึทื ืกืคืขืจื“ ืฆื• ื“ื™ ืžื™ื˜ืŸ ืคื•ืŸ ื“ื™ ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ื‘ืœืึธืง, ืึทื–ื•ื™ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื˜ืึทืงืข ื“ืึทืจืคึฟืŸ ื‘ื™ื˜ืขืงืึธื“ืข ื™ื ื˜ืขืจืคึผืจืึทื˜ืึทื“ ืคึฟื•ืŸ ืงื™ื™ืŸ ืคืึธื˜ืึธ, ืื•ืŸ ืžื™ืจ ืงืขื ืขืŸ ืคืฉื•ื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืขืก ืคึฟื•ืŸ ื“ื™ ืคื•ื ืงืฆื™ืข ืื•ื™ืฃ ื˜ื‘. .

ื–ื™ื™ ื–ืขื ืขืŸ ื’ืขืงื•ืžืขืŸ ืื•ืŸ ืงื™ืงื˜

ื›ืึธื˜ืฉ ืื™ืš ืกื˜ืึทืจื˜ืขื“ ืจื™ืจื™ื™ื˜ื™ื ื’ ื“ื™ ืงืึธื“ ืื™ืŸ ื™ื•ืœื™, ืึท ืžืึทื’ื™ืฉ ื‘ืจื™ืง ืงืจืขืคึผื˜ ืึทืจื•ื™ืฃ ืึทื ื ืึธื•ื˜ื™ืกื˜: ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืื•ืชื™ื•ืช ืคื•ืŸ GitHub ืึธื ืงื•ืžืขืŸ ื•ื•ื™ ื ืึธื•ื˜ืึทืคืึทืงื™ื™ืฉืึทื ื– ื•ื•ืขื’ืŸ ืจืขืกืคึผืึธื ืกืขืก ืฆื• ื™ืฉื•ื– ืื•ืŸ ืฆื™ืขืŸ ืจื™ืงื•ื•ืขืก, ืึธื‘ืขืจ ื“ืึธ, ืคึผืœื•ืฆืœื™ื ื’ ื“ืขืจืžืึธื ืขืŸ ืื™ืŸ ืคึฟืึธื“ืขื ื‘ื™ื™ื ืขืจื™ืขืŸ ื•ื•ื™ ืึท ืงืขืžื• ื‘ืึทืงืขื ื“ ืื™ืŸ ื“ืขื ืงืึธื ื˜ืขืงืกื˜, "ืขืจ ื”ืื˜ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก, ืืคึฟืฉืจ ืขืจ ื•ื•ืขื˜ ื–ืึธื’ืŸ ืขืคึผืขืก." ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ื ื™ืฆืŸ Emscripten ืก ืคึฟืึทืจื‘ื•ื ื“ืขื ืข ื‘ื™ื‘ืœื™ืึธื˜ืขืง ื‘ื™ื™ื ืขืจื™ืขืŸ ืฆื• ืฉืึทืคึฟืŸ WASM JIT. ื ื•, ืื™ืš ื’ืขื–ืื’ื˜ ืึทื– ืื™ืจ ื”ืึธื‘ืŸ ืึท ืึทืคึผืึทื˜ืฉื™ 2.0 ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ื“ืึธืจื˜, ืื•ืŸ QEMU ื•ื•ื™ ืึท ื’ืึทื ืฅ ืื™ื– ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืื•ื ื˜ืขืจ GPLv2, ืื•ืŸ ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืขืจ ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ. ืคึผืœื•ืฆืœื™ื ื’ ืขืก ืคืืจืงืขืจื˜ ืื•ื™ืก ืึทื– ืึท ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืคืึทืจืจื™ื›ื˜ืŸ ืขืก ืขืคืขืก (ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ืกืŸ: ืืคึฟืฉืจ ื˜ื•ื™ืฉืŸ ืขืก, ืืคึฟืฉืจ ืฆื•ื•ื™ื™ืขื ื“ื™ืง ืœื™ื™ืกืึทื ืกื™ื ื’, ืืคึฟืฉืจ ืขืคึผืขืก ืึทื ื“ืขืจืฉ ...). ื“ืืก ื”ืื˜ ืžื™ืจ ืคืืจืฉื˜ืฒื˜ ื–ื™ืš ื’ืขืคืจืฒื˜, ืฐืฒืœ ืื™ืš ื”ืื‘ ืฉื•ื™ืŸ ืฆื• ื™ืขื ืขืจ ืฆืฒื˜ ื’ืขืงื•ืงื˜ ื‘ื™ื™ื ืขืจื™ ืคึฟืึธืจืžืึทื˜ ื•ื•ืขื‘ ืึทืกืขืžื‘ืœื™, ืื•ืŸ ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ืขืคืขืก ื˜ืจื•ื™ืขืจื™ืง ืื•ืŸ ื™ื ื’ืงืึทืžืคึผืจืึทื›ืขื ืกื™ื‘ืึทืœ. ืขืก ืื™ื– ืื•ื™ืš ื’ืขื•ื•ืขืŸ ืึท ื‘ื™ื‘ืœื™ืึธื˜ืขืง ื•ื•ืึธืก ื•ื•ืึธืœื˜ ืคืจืขืกืŸ ื“ื™ ื™ืงืขืจื“ื™ืง ื‘ืœืึทืงืก ืžื™ื˜ ื“ื™ ื™ื‘ืขืจื’ืึทื ื’ ื’ืจืึทืคื™ืง, ืคึผืจืึธื“ื•ืฆื™ืจืŸ ื“ื™ ื‘ื™ื˜ืขืงืึธื“ืข, ืื•ืŸ ืืคื™ืœื• ืœื•ื™ืคืŸ ืขืก ืื™ืŸ ื“ื™ ื™ื‘ืขืจื–ืขืฆืขืจ ื–ื™ืš, ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง.

ื“ืขืžืึธืœื˜ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืžืขืจ ืึท ื‘ืจื™ื•ื• ืื•ื™ืฃ ื“ื™ QEMU ืžื™ื™ืœื™ื ื’ ืจืฉื™ืžื”, ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ืžืขืจ ื•ื•ืขื’ืŸ ื“ื™ ืงืฉื™ื, "ื•ื•ืขืจ ื“ืึทืจืฃ ืขืก ืกื™ื™ึท ื•ื•ื™ ืกื™ื™ึท?" ืื•ืŸ ืขืก ืื™ื– ืคึผืœื•ืฆืœื™ื ื’, ืข ืก ื”ื ื˜ ื–ื™ ืš ืืจื•ื™ืกื’ืขืฐื™ื–ืŸ . ืื™ืŸ ืึท ืžื™ื ื™ืžื•ื, ืื™ืจ ืงืขื ืขืŸ ืกืงืจืึทืคึผ ืฆื•ื–ืึทืžืขืŸ ืึทื–ืึท ืคึผืึทืกืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ ื ื•ืฆืŸ ืื•ื™ื‘ ืขืก ืึทืจื‘ืขื˜ ืžืขืจ ืึธื“ืขืจ ื•ื•ื™ื™ื ื™ืงืขืจ ื’ืขืฉื•ื•ื™ื ื“:

  • ืœืึธื ื˜ืฉื™ื ื’ ืขืคึผืขืก ื‘ื™ืœื“ื•ื ื’ืงืจื™ื™ื– ืึธืŸ ืงื™ื™ืŸ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’
  • ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืื•ื™ืฃ ื™ืึธืก, ื•ื•ื•, ืœื•ื™ื˜ ืจื•ืžืึธืจืก, ื“ื™ ื‘ืœื•ื™ื– ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืึธืก ื”ืื˜ ื“ื™ ืจืขื›ื˜ ืฆื• ืงืึธื“ ื“ื•ืจ ืื•ื™ืฃ ื“ื™ ืคืœื™ืขืŸ ืื™ื– ืึท JS ืžืึธื˜ืึธืจ (ืื™ื– ื“ืึธืก ืืžืช?)
  • ื“ืขืžืึทื ืกื˜ืจื™ื™ืฉืึทืŸ ืคื•ืŸ ืžื™ื ื™-ืึทืก - ืื™ื™ืŸ-ืคืœืึธืคึผืคึผื™, ื’ืขื‘ื•ื™ื˜-ืื™ืŸ, ืึทืœืข ืžื™ื ื™ื ืคื•ืŸ ืคื™ืจืžื•ื•ืึทืจืข, ืขื˜ืง ...

ื‘ืœืขื˜ืขืจืขืจ ืจื•ื ื˜ื™ืžืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ

ื•ื•ื™ ืื™ืš ืฉื•ื™ืŸ ื’ืขื–ืื’ื˜, QEMU ืื™ื– ื˜ื™ื™ื“ ืฆื• ืžื•ืœื˜ื™ื˜ื”ืจืขืึทื“ื™ื ื’, ืึธื‘ืขืจ ื“ืขืจ ื‘ืœืขื˜ืขืจืขืจ ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืขืก. ื ื•, ื“ืึธืก ืื™ื–, ื ื™ื˜ ... ืื™ืŸ ืขืจืฉื˜ืขืจ ืขืก ื”ืื˜ ื ื™ืฉื˜ ืขืงืกื™ืกื˜ื™ืจืŸ ืื™ืŸ ืึทืœืข, ื“ืขืžืึธืœื˜ ื•ื•ืขื‘ื•ื•ืึธืจืงืขืจืก ืืจื•ื™ืก - ื•ื•ื™ ื•ื•ื™ื™ึทื˜ ื•ื•ื™ ืื™ืš ืคึฟืึทืจืฉื˜ื™ื™ืŸ, ื“ืึธืก ืื™ื– ืžื•ืœื˜ื™ื˜ื”ืจืขืึทื“ื™ื ื’ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืึธื ื–ืึธื’ ื’ื™ื™ื˜ ืคืืจื‘ื™ื™ ืึธืŸ ืฉืขืจื“ ื•ื•ืขืจื™ืึทื‘ืึทืœื–. ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ื“ืึธืก ืงืจื™ื™ื™ืฅ ื‘ืึทื˜ื™ื™ื˜ื™ืง ืคึผืจืึธื‘ืœืขืžืก ื•ื•ืขืŸ ืคึผืึธืจื˜ื™ื ื’ ื™ื’ื–ื™ืกื˜ื™ื ื’ ืงืึธื“ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืฉืขืจื“ ื–ื›ึผืจื•ืŸ ืžืึธื“ืขืœ. ื“ืขืžืืœื˜ , ืื•ื ื˜ืขืจ ืขืคื ื˜ืœืขื› ืข ื“ืจื•ืง , ืื™ ื– ืข ื ืื•ื™ ืš ื“ื•ืจื›ื’ืขืคื™ืจ ื˜ ื’ืขืฐืืจ ืŸ ืื•ื ื˜ืขืจ ืŸ ื ืืžืขืŸ SharedArrayBuffers. ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ื™ืกืœืขื›ื•ื•ื™ื™ึทื– ื‘ืึทืงืขื ืขื , ื–ื™ื™ ืกืขืœืึทื‘ืจื™ื™ื˜ื™ื“ ื–ื™ื™ึทืŸ ืงืึทื˜ืขืจ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื‘ืจืึทื•ื–ืขืจื–, ื“ืขืžืึธืœื˜ ื–ื™ื™ ืกืขืœืึทื‘ืจื™ื™ื˜ื™ื“ ื“ื™ ื ื™ื• ื™ืึธืจ, ืื•ืŸ ื“ืขืžืึธืœื˜ ืžืขืœื˜ื“ืึธื•ื•ืŸ ... ื ืึธืš ื•ื•ืึธืก ื–ื™ื™ ื’ืขืงื•ืžืขืŸ ืฆื• ื“ื™ ืžืกืงื ื ืึทื– ืคึผืจืึธืกื˜ ืึธื“ืขืจ ืคึผืจืึธืกื˜ ื“ื™ ืฆื™ื™ื˜ ืžืขื–ืฉืขืจืžืึทื ื˜, ืึธื‘ืขืจ ืžื™ื˜ ื“ื™ ื”ื™ืœืฃ ืคื•ืŸ ืฉืขืจื“ ื–ื›ึผืจื•ืŸ ืื•ืŸ ืึท ืคืึธื“ืขื ื™ื ืงืจืึทืžืึทื ื˜ื™ื ื’ ื“ื™ ื˜ืึธืžื‘ืึทื ืง, ืขืก ืก ืึทืœืข ื“ื™ ื–ืขืœื‘ืข ืขืก ื•ื•ืขื˜ ืึทืจื‘ืขื˜ ืื•ื™ืก ืฉื™ื™ืŸ ืึทืงื™ืขืจืึทื˜ืœื™. ืึทื–ื•ื™ ืžื™ืจ ืคืึทืจืงืจื™ืคึผืœื˜ ืžื•ืœื˜ื™ื˜ื”ืจืขืึทื“ื™ื ื’ ืžื™ื˜ ืฉืขืจื“ ื–ื›ึผืจื•ืŸ. ืขืก ืžื™ื™ื ื˜ ืึทื– ื–ื™ื™ ืฉืคึผืขื˜ืขืจ ื•ื•ืขื ื“ืŸ ืขืก ืฆื•ืจื™ืง, ืึธื‘ืขืจ, ื•ื•ื™ ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ืงืœืึธืจ ืคื•ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืขืงืกืคึผืขืจื™ืžืขื ื˜, ืขืก ืื™ื– ืœืขื‘ืŸ ืึธืŸ ืขืก, ืื•ืŸ ืื•ื™ื‘ ืึทื–ื•ื™, ืžื™ืจ ื•ื•ืขืœืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื˜ืึธืŸ ืขืก ืึธืŸ ืจื™ืœื™ื™ื™ื ื’ ืื•ื™ืฃ ืžื•ืœื˜ื™ื˜ื”ืจืขืึทื“ื™ื ื’.

ื“ื™ ืจื’ืข ืฉื˜ืจื™ืš ืื™ื– ื“ื™ ื™ืžืคึผืึธืกื™ื‘ื™ืœื™ื˜ื™ ืคื•ืŸ ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ืžืึทื ื™ืคึผื™ืึทืœื™ื™ืฉืึทื ื– ืžื™ื˜ ื“ืขื ืึธื ืœื™ื™ื’ืŸ: ืื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืคืฉื•ื˜ ื ืขืžืขืŸ, ืจืึทื˜ืขื•ื•ืขืŸ ื“ืขื ืงืจืึทื ื˜ ืงืึธื ื˜ืขืงืกื˜ ืื•ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืฆื• ืึท ื ื™ื™ึทืข ืžื™ื˜ ืึท ื ื™ื™ึทืข ืึธื ืœื™ื™ื’ืŸ. ื“ื™ ืจื•ืคืŸ ืึธื ืœื™ื™ื’ืŸ ืื™ื– ื’ืขืจืื˜ืŸ ื“ื•ืจืš ื“ื™ JS ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ. ืขืก ื•ื•ืึธืœื˜ ื•ื™ืกืงื•ืžืขืŸ, ื•ื•ืึธืก ืื™ื– ื“ื™ ืคึผืจืึธื‘ืœืขื, ื–ื™ื ื˜ ืžื™ืจ ื ืึธืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคื™ืจืŸ ื“ื™ ืขืจืฉื˜ืข ืคืœืึธื•ื– ื’ืึธืจ ืžืึทื ื™ื•ืึทืœื™? ื“ืขืจ ืคืึทืงื˜ ืื™ื– ืึทื– ื‘ืœืึธืง I / O ืื™ืŸ QEMU ืื™ื– ื™ืžืคึผืœืึทืžืขื ืึทื“ ื“ื•ืจืš ืงืึธืจืึธื•ื˜ื™ื ื–, ืื•ืŸ ื“ืึธืก ืื™ื– ื•ื•ื• ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ืึธื ืœื™ื™ื’ืŸ ืžืึทื ื™ืคึผื™ืึทืœื™ื™ืฉืึทื ื– ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ื ื•ืฆื™ืง. ืฆื•ืž ื’ืœื™ืง, Emscipten ืฉื•ื™ืŸ ื›ึผื•ืœืœ ืึท ืžืขืงืึทื ื™ื–ืึทื ืคึฟืึทืจ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืึทืคึผืขืจื™ื™ืฉืึทื ื–, ืืคื™ืœื• ืฆื•ื•ื™ื™: ืึทืกื™ื ืกื™ืคื™ ะธ ืขืžื˜ืขืจืคึผืจืขื˜ืขืจ. ื“ืขืจ ืขืจืฉื˜ืขืจ ืึทืจื‘ืขื˜ ื“ื•ืจืš ืึท ื‘ืึทื˜ื™ื™ื˜ื™ืง ื‘ืœืึธื•ื˜ื™ื ื’ ืื™ืŸ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืงืึธื“ ืื•ืŸ ืื™ื– ื ื™ื˜ ืžืขืจ ื’ืขืฉื˜ื™ืฆื˜. ื“ื™ ืจื’ืข ืื™ื– ื“ื™ ืงืจืึทื ื˜ "ืจื™ื›ื˜ื™ื’ ื•ื•ืขื’" ืื•ืŸ ืึทืจื‘ืขื˜ ื“ื•ืจืš ื‘ื™ื™ื˜ืขืงืึธื“ ื“ื•ืจ ืคึฟืึทืจ ื“ื™ ื’ืขื‘ื•ื™ืจืŸ ื™ื‘ืขืจื–ืขืฆืขืจ. ืขืก ืึทืจื‘ืขื˜, ืคื•ืŸ ืงื•ืจืก, ืกืœืึธื•ืœื™, ืึธื‘ืขืจ ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ื‘ืœืึธื•ื˜ื™ื ื’ ื“ื™ ืงืึธื“. ืืžืช, ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืงืึธืจืึธื•ื˜ื™ื ืขืก ืคึฟืึทืจ ื“ืขื ืžืขืงืึทื ื™ื–ืึทื ื”ืื˜ ืฆื• ื–ื™ื™ืŸ ืงืึทื ื˜ืจื™ื‘ื™ื•ื˜ื™ื“ ื™ื ื“ื™ืคึผืขื ื“ืึทื ื˜ืœื™ (ืขืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืงืึธืจืึธื•ื˜ื™ื ืขืก ืคึฟืึทืจ Asyncify ืื•ืŸ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึทืŸ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื‘ืขืขืจืขืš ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ API ืคึฟืึทืจ Emterpreter, ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ื–ื™ื™).

ืื™ืŸ ื“ืขืจ ืžืึธืžืขื ื˜, ืื™ืš ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื ืึธืš ื’ืขืจืื˜ืŸ ืฆื• ืฉืคึผืึทืœื˜ืŸ ื“ืขื ืงืึธื“ ืื™ืŸ ืื™ื™ืŸ ืงืึทืžืคึผื™ื™ืœื“ ืื™ืŸ WASM ืื•ืŸ ื™ื ื˜ืขืจืคึผืจืึทื˜ืึทื“ ื ื™ืฆืŸ Emterpreter, ืึทื–ื•ื™ ื‘ืœืึธืง ื“ืขื•ื•ื™ืกืขืก ื˜ืึธืŸ ื ื™ื˜ ืึทืจื‘ืขื˜ ื ืึธืš (ื–ืขืŸ ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืกืขืจื™ืข, ื•ื•ื™ ื–ื™ื™ ื–ืึธื’ืŸ ...). ืึทื– ืื™ื–, ืื™ืŸ ื“ื™ ืกื•ืฃ ืื™ืจ ื–ืึธืœ ื‘ืึทืงื•ืžืขืŸ ืขืคึผืขืก ื•ื•ื™ ื“ืขื ืžืึธื“ื ืข ืœื™ื™ืขืจื“ ื–ืึทืš:

  • ื™ื ื˜ืขืจืคึผืจืึทื˜ืึทื“ ื‘ืœืึธืง ืื™ืš / ืึธ. ื ื•, ื”ืึธื˜ ืื™ืจ ื˜ืึทืงืข ื“ืขืจื•ื•ืึทืจื˜ืŸ ืขืžื™ืึทืœื™ื™ื˜ื™ื“ NVMe ืžื™ื˜ ื’ืขื‘ื•ื™ืจืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’? ๐Ÿ™‚
  • ืกื˜ืึทื˜ื™ืงืœื™ ืงืึทืžืคึผื™ื™ืœื“ ื”ื•ื™ืคึผื˜ QEMU ืงืึธื“ (ืื™ื‘ืขืจื–ืขืฆืขืจ, ืื ื“ืขืจืข ืขืžื™ืึทืœื™ื™ื˜ื™ื“ ื“ืขื•ื•ื™ืกืขืก, ืืื–"ื• ื•)
  • ื“ื™ื ืึทืžื™ืงืึทืœืœื™ ืงืึทืžืคึผื™ื™ืœื“ ื’ืึทืกื˜ ืงืึธื“ ืื™ืŸ WASM

ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ QEMU ืงื•ื•ืืœืŸ

ื•ื•ื™ ืื™ืจ ืžื™ืกื˜ืึธืžืข ืฉื•ื™ืŸ ื’ืขืกื˜, ื“ื™ ืงืึธื“ ืคึฟืึทืจ ืขืžื™ืึทืœื™ื™ื˜ื™ื ื’ ื’ืึทืกื˜ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจื– ืื•ืŸ ื“ื™ ืงืึธื“ ืคึฟืึทืจ ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ื‘ืึทืœืขื‘ืึธืก ืžืึทืฉื™ืŸ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ื–ืขื ืขืŸ ืืคื’ืขืฉื™ื™ื“ื˜ ืื™ืŸ QEMU. ืื™ืŸ ืคืึทืงื˜, ืขืก ืื™ื– ืืคื™ืœื• ืึท ื‘ื™ืกืœ ื˜ืจื™ืงื™ืขืจ:

  • ืขืก ื–ืขื ืขืŸ ื’ืึทืกื˜ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจื–
  • ืขืก ื™ื– ืคืึทืจืึทืŸ ืึทืงืกืขืœืขืจื™ื™ื˜ืขืจื–, ื ืขืžืœื™ืš, KVM ืคืืจ ื”ืึทืจื“ื•ื•ืขืจ ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืึทืฆื™ืข ืื•ื™ืฃ Linux (ืคึฟืึทืจ ืงืึธืžืคึผืึทื˜ื™ื‘ืœืข ื’ืึทืกื˜ ืื•ืŸ ื”ืึธืกื˜ ืกื™ืกื˜ืขืžืขืŸ), TCG ืคึฟืึทืจ ื“ื–ืฉืึทืกื˜-ืื™ืŸ-ื˜ื™ื™ื ืงืึธื“ ื“ื–ืฉืขื ืขืจื™ื™ืฉืึทืŸ ืขืจื’ืขืฅ. ืึธื ื”ื™ื™ื‘ื ื“ื™ืง ืžื™ื˜ QEMU 2.9, ืฉื˜ื™ืฆืข ืคึฟืึทืจ ื“ื™ HAXM ื”ืึทืจื“ื•ื•ืขืจ ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืึทืฆื™ืข ืกื˜ืึทื ื“ืึทืจื˜ ืื™ื– ืืจื•ื™ืก ืื•ื™ืฃ Windows (ื“ื™ ื“ืขื˜ืึทื™ืœืก)
  • ืื•ื™ื‘ TCG ืื™ื– ื’ืขื ื™ืฆื˜ ืืœื ื•ื•ื™ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืึทื˜ื™ืึธืŸ, ืขืก ื”ืื˜ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืงืึธื“ ื“ื•ืจ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื™ืขื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืคึฟืึทืจ ื“ื™ ื•ื ื™ื•ื•ืขืจืกืึทืœ ื™ื‘ืขืจื–ืขืฆืขืจ
  • ... ืื•ืŸ ืึทืจื•ื ืึทืœืข ื“ืขื - ืขืžื™ืึทืœื™ื™ื˜ื™ื“ ืคึผืขืจื™ืคืขืจืึทืœืก, ื‘ืึทื ื™ืฆืขืจ ืฆื•ื‘ื™ื ื“, ืžื™ื’ืจืึทื˜ื™ืึธืŸ, ืจืขืงืึธืจื“-ืจื™ืคึผืœื™ื™, ืขื˜ืง.

ืื’ื‘, ื”ืื˜ ืื™ืจ ื•ื•ื™ืกืŸ: QEMU ืงืขื ืขืŸ ืขืžื™ืึทืœื™ื™ื˜ ื ื™ื˜ ื‘ืœื•ื™ื– ื“ื™ ื’ืื ืฆืข ืงืึธืžืคึผื™ื•ื˜ืขืจ, ืึธื‘ืขืจ ืื•ื™ืš ื“ื™ ืคึผืจืึทืกืขืกืขืจ ืคึฟืึทืจ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืคึผืจืึธืฆืขืก ืื™ืŸ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืงืขืจืŸ, ื•ื•ืึธืก ืื™ื– ื’ืขื ื™ืฆื˜, ืœืžืฉืœ, ื“ื•ืจืš ื“ื™ AFL Fuzzer ืคึฟืึทืจ ื‘ื™ื™ื ืขืจื™ ื™ื ืกื˜ืจืึทืžืขื ื˜ื™ื™ืฉืึทืŸ. ื˜ืึธืžืขืจ ืขืžืขืฆืขืจ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ืขื ืžืึธื“ืข ืคื•ืŸ โ€‹โ€‹ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹QEMU ืฆื• JS? ๐Ÿ˜‰

ื•ื•ื™ ืจื•ื‘ึฟ ืœืึทื ื’-ืฉื˜ื™ื™ืขื ื“ื™ืง ืคืจื™ื™ ื•ื•ื™ื™ื›ื•ื•ืืจื’, QEMU ืื™ื– ื’ืขื‘ื•ื™ื˜ ื“ื•ืจืš ื“ื™ ืจื•ืคืŸ configure ะธ make. ื–ืืœ ืก ื–ืึธื’ืŸ ืื™ืจ ื‘ืึทืฉืœื™ืกืŸ ืฆื• ืœื™ื™ื’ืŸ ืขืคึผืขืก: ืึท TCG ื‘ืึทืงืขื ื“, ืคืึธื“ืขื ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ, ืขืคึผืขืก ืึทื ื“ืขืจืฉ. ื“ื• ื–ืืœืกื˜ ื ื™ืฉื˜ ืงืึทืžื™ืฉ ืฆื• ื–ื™ื™ืŸ ืฆื•ืคืจื™ื“ืŸ / ื›ืึธืจืึทืคื™ื™ื“ (ื•ื ื“ืขืจืœื™ื™ืŸ ื•ื•ื™ ืฆื•ื ืขืžืขืŸ) ืื™ืŸ ื“ื™ ื•ื™ืกืงื•ืง ืคื•ืŸ ืงืึทืžื™ื•ื ืึทืงื™ื™ื˜ื™ื ื’ ืžื™ื˜ ืึทื•ื˜ืึธืงืึธื ืฃ - ืื™ืŸ ืคืึทืงื˜, configure QEMU ืก ืื™ื– ืžืฉืžืขื•ืช ื–ื™ืš-ื’ืขืฉืจื™ื‘ืŸ ืื•ืŸ ืื™ื– ื ื™ืฉื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืคื•ืŸ ืขืคึผืขืก.

ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™

ืึทื–ื•ื™ ื•ื•ืึธืก ืื™ื– ื“ื™ ื–ืึทืš ื’ืขืจื•ืคืŸ ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™ (ืึทืงืึท ื•ื•ืึทืกื)? ื“ืึธืก ืื™ื– ืึท ืคืึทืจื‘ื™ื™ึทื˜ ืคึฟืึทืจ Asm.js, ื ื™ื˜ ืžืขืจ ืคึผืจื™ื˜ืขื ื“ื™ื ื’ ืฆื• ื–ื™ื™ืŸ ื’ื™ืœื˜ื™ืง ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืงืึธื“. ืื•ื™ืฃ ื“ื™ ืคืึทืจืงืขืจื˜, ืขืก ืื™ื– ืจื™ื™ืŸ ื‘ื™ื™ื ืขืจื™ ืื•ืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“, ืื•ืŸ ืืคื™ืœื• ืคืฉื•ื˜ ืฉืจื™ื™ึทื‘ืŸ ืึท ื’ืึทื ืฅ ื ื•ืžืขืจ ืื™ืŸ ืขืก ืื™ื– ื ื™ืฉื˜ ื–ื™ื™ืขืจ ืคึผืฉื•ื˜: ืคึฟืึทืจ ืงืึทืžืคึผืึทืงื˜ื ืึทืก, ืขืก ืื™ื– ืกื˜ืึธืจื“ ืื™ืŸ ื“ืขื ืคึฟืึธืจืžืึทื˜. LEB128.

ืื™ืจ ืงืขืŸ ื”ืึธื‘ืŸ ื’ืขื”ืขืจื˜ ื•ื•ืขื’ืŸ ื“ื™ ืจืขืœืึธืคึผื™ื ื’ ืึทืœื’ืขืจื™ื“ืึทื ืคึฟืึทืจ Asm.js - ื“ืึธืก ืื™ื– ื“ื™ ืจืขืกื˜ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ "ื”ื•ื™ืš-ืžื“ืจื’ื”" ืœื•ื™ืคืŸ ืงืึธื ื˜ืจืึธืœ ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก (ื“ืึธืก ืื™ื–, ืื•ื™ื‘-ื“ืขืžืึธืœื˜ ืึทื ื“ืขืจืฉ, ืœื•ืคึผืก, ืืื–"ื• ื•), ืคึฟืึทืจ ื•ื•ืึธืก JS ืขื ื“ื–ืฉืึทื ื– ื–ืขื ืขืŸ ื“ื™ื–ื™ื™ื ื“, ืคึฟื•ืŸ ื“ื™ ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” LLVM IR, ื ืขืขื ื˜ืขืจ ืฆื• ื“ื™ ืžืึทืฉื™ืŸ ืงืึธื“ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื“ื•ืจืš ื“ื™ ืคึผืจืึทืกืขืกืขืจ. ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ื“ื™ ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืคืึทืจื˜ืจืขื˜ื•ื ื’ ืคื•ืŸ QEMU ืื™ื– ื ืขืขื ื˜ืขืจ ืฆื• ื“ื™ ืจื’ืข. ืขืก ื•ื•ืึธืœื˜ ื•ื™ืกืงื•ืžืขืŸ ืึทื– ื“ืึธ ืขืก ืื™ื–, ื‘ื™ื˜ืขืงืึธื“ืข, ื“ืขืจ ืกื•ืฃ ืคื•ืŸ ื“ื™ ืžืึทื˜ืขืจืŸ ... ืื•ืŸ ื“ืขืžืึธืœื˜ ืขืก ื–ืขื ืขืŸ ื‘ืœืึทืงืก, ืื•ื™ื‘-ื“ืขืžืึธืœื˜-ืึทื ื“ืขืจืฉ ืื•ืŸ ืœื•ืคึผืก!..

ืื•ืŸ ื“ืึธืก ืื™ื– ืืŸ ืื ื“ืขืจ ืกื™ื‘ื” ื•ื•ืึธืก Binaryen ืื™ื– ื ื•ืฆื™ืง: ืขืก ืงืขื ืขืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืึธื ื ืขืžืขืŸ ื”ื•ื™ืš-ืžื“ืจื’ื” ื‘ืœืึทืงืก ื ืึธืขื ื˜ ืฆื• ื•ื•ืึธืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืกื˜ืึธืจื“ ืื™ืŸ WASM. ืึธื‘ืขืจ ืขืก ืงืขื ืขืŸ ืื•ื™ืš ืคึผืจืึธื“ื•ืฆื™ืจืŸ ืงืึธื“ ืคื•ืŸ ืึท ื’ืจืึทืคื™ืง ืคื•ืŸ ื™ืงืขืจื“ื™ืง ื‘ืœืึทืงืก ืื•ืŸ ื˜ืจืึทื ื–ื™ืฉืึทื ื– ืฆื•ื•ื™ืฉืŸ ื–ื™ื™. ื ื•, ืื™ืš ื”ืื‘ ืฉื•ื™ืŸ ื’ืขื–ืื’ื˜ ืึทื– ืขืก ื›ื™ื™ื“ื– ื“ื™ ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™ ืกื˜ืึธืจื™ื“ื–ืฉ ืคึฟืึธืจืžืึทื˜ ื”ื™ื ื˜ืขืจ ื“ื™ ื‘ืึทืงื•ื•ืขื C / C ++ ืึทืคึผื™.

TCG (Tiny Code Generator)

GTC ืื™ื– ืขืจื™ื“ื–ืฉื ืึทืœื™ ื‘ืึทืงืขื ื“ ืคึฟืึทืจ ื“ื™ ืงืึทืžืคึผื™ื™ืœืขืจ C. ื“ืขืจื ืึธืš, ืžืฉืžืขื•ืช, ืขืก ืงืขืŸ ื ื™ืฉื˜ ื•ื•ื™ื˜ืกื˜ืึทื ื“ ื“ื™ ืคืึทืจืžืขืกื˜ ืžื™ื˜ GCC, ืึธื‘ืขืจ ืื™ืŸ ื“ื™ ืกื•ืฃ ืขืก ื’ืขืคึฟื•ื ืขืŸ ื–ื™ื™ืŸ ืึธืจื˜ ืื™ืŸ QEMU ื•ื•ื™ ืึท ืงืึธื“ ื“ื•ืจ ืžืขืงืึทื ื™ื–ืึทื ืคึฟืึทืจ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืคึผืœืึทื˜ืคืึธืจืžืข. ืขืก ืื™ื– ืื•ื™ืš ืึท TCG ื‘ืึทืงืขื ื“ ื•ื•ืึธืก ื“ื–ืฉืขื ืขืจื™ื™ืฅ ืขื˜ืœืขื›ืข ืึทื‘ืกื˜ืจืึทืงื˜ ื‘ื™ื˜ืขืงืึธื“ืข, ื•ื•ืึธืก ืื™ื– ื’ืœื™ื™ืš ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื“ื•ืจืš ื“ื™ ื™ื‘ืขืจื–ืขืฆืขืจ, ืึธื‘ืขืจ ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ื ื™ืฆืŸ ืขืก ื“ืึธืก ืžืึธืœ. ืึธื‘ืขืจ, ื“ืขืจ ืคืึทืงื˜ ืึทื– ืื™ืŸ QEMU ืขืก ืื™ื– ืฉื•ื™ืŸ ืžืขื’ืœืขืš ืฆื• ื’ืขื‘ืŸ ื“ื™ ื™ื‘ืขืจื’ืึทื ื’ ืฆื• ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื˜ื‘ ื“ื•ืจืš ื“ื™ ืคื•ื ืงืฆื™ืข tcg_qemu_tb_exec, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื–ื™ื™ืขืจ ื ื•ืฆื™ืง ืคึฟืึทืจ ืžื™ืจ.

ืฆื• ืœื™ื™ื’ืŸ ืึท ื ื™ื™ึทืข TCG ื‘ืึทืงืขื ื“ ืฆื• QEMU, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืกื•ื‘ื“ื™ืจืขืงื˜ืึธืจื™ tcg/<ะธะผั ะฐั€ั…ะธั‚ะตะบั‚ัƒั€ั‹> (ืื™ืŸ ื“ืขื ืคืึทืœ, tcg/binaryen), ืื•ืŸ ืขืก ื›ึผื•ืœืœ ืฆื•ื•ื™ื™ ื˜ืขืงืขืก: tcg-target.h ะธ tcg-target.inc.c ะธ ืคืึธืจืฉืจื™ื™ึทื‘ืŸ ืขืก ืก ืึทืœืข ื•ื•ืขื’ืŸ configure. ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ืื ื“ืขืจืข ื˜ืขืงืขืก ื“ืึธืจื˜, ืึธื‘ืขืจ, ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื˜ืจืขืคืŸ ืคึฟื•ืŸ ื“ื™ ื ืขืžืขืŸ ืคื•ืŸ ื“ื™ ืฆื•ื•ื™ื™, ื–ื™ื™ ื•ื•ืขืœืŸ ื‘ื™ื™ื“ืข ื–ื™ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืขืจื’ืขืฅ: ืื™ื™ื ืขืจ ื•ื•ื™ ืึท ืจืขื’ื•ืœืขืจ ื›ืขื“ืขืจ ื˜ืขืงืข (ืขืก ืื™ื– ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ tcg/tcg.h, ืื•ืŸ ืึทื– ืื™ื™ื ืขืจ ืื™ื– ืฉื•ื™ืŸ ืื™ืŸ ืื ื“ืขืจืข ื˜ืขืงืขืก ืื™ืŸ ื“ื™ ื“ื™ืจืขืงื˜ืขืจื™ื– tcg, accel ืื•ืŸ ื ื™ื˜ ื‘ืœื•ื™ื–), ื“ื™ ืื ื“ืขืจืข - ื‘ืœื•ื™ื– ื•ื•ื™ ืึท ืงืึธื“ ืกื ื™ืคึผืึทื˜ ืื™ืŸ tcg/tcg.c, ืึธื‘ืขืจ ืขืก ื”ืื˜ ืึทืงืกืขืก ืฆื• ื–ื™ื™ึทืŸ ืกื˜ืึทื˜ื™ืง ืคืึทื ื’ืงืฉืึทื ื–.

ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืึทื– ืื™ืš ื•ื•ืึธืœื˜ ืคืึทืจื‘ืจืขื ื’ืขืŸ ืฆื• ืคื™ืœ ืฆื™ื™ื˜ ืื•ื™ืฃ ื“ื™ื˜ื™ื™ืœื“ ื™ื ื•ื•ืขืกื˜ืึทื’ื™ื™ืฉืึทื ื– ืคื•ืŸ ื•ื•ื™ ืขืก ืึทืจื‘ืขื˜, ืื™ืš ืคืฉื•ื˜ ืงืึทืคึผื™ื“ ื“ื™ "ืกืงืขืœืขื˜ืึธื ืก" ืคื•ืŸ ื“ื™ ืฆื•ื•ื™ื™ ื˜ืขืงืขืก ืคึฟื•ืŸ ืืŸ ืื ื“ืขืจ ื‘ืึทืงืขื ื“ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ, ื”ืึธื ืขืกื˜ืœื™ ื™ื ื“ืึทืงื™ื™ื˜ื™ื ื’ ื“ืขื ืื™ืŸ ื“ื™ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ื›ืขื“ืขืจ.

ื˜ืขืงืข tcg-target.h ื›ึผื•ืœืœ ื“ืขืจ ื”ื•ื™ืคึผื˜ ืกืขื˜ื˜ื™ื ื’ืก ืื™ืŸ ื“ื™ ืคืึธืจืขื #define-ืก:

  • ื•ื•ื™ ืคื™ืœืข ืจืขื“ื–ืฉื™ืกื˜ืขืจื– ืื•ืŸ ื•ื•ืึธืก ื‘ืจื™ื™ื˜ ื–ืขื ืขืŸ ืื•ื™ืฃ ื“ื™ ืฆื™ืœ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ (ืžื™ืจ ื”ืึธื‘ืŸ ื•ื•ื™ ืคื™ืœืข ื•ื•ื™ ืžื™ืจ ื•ื•ื™ืœืŸ, ื•ื•ื™ ืคื™ืœืข ื•ื•ื™ ืžื™ืจ ื•ื•ื™ืœืŸ - ื“ื™ ืงืฉื™ื ืื™ื– ืžืขืจ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืื™ืŸ ืžืขืจ ืขืคืขืงื˜ื™ื•ื• ืงืึธื“ ื“ื•ืจืš ื“ืขื ื‘ืœืขื˜ืขืจืขืจ ืื•ื™ืฃ ื“ื™ "ื’ืึทื ืฅ ืฆื™ืœ" ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ...)
  • ืึทืœื™ื™ื ืžืึทื ื˜ ืคื•ืŸ ื‘ืึทืœืขื‘ืึธืก ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก: ืื•ื™ืฃ ืงืก 86 ืื•ืŸ ืืคื™ืœื• ืื™ืŸ TCI, ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืึทืœื™ื™ื ื“ ืื™ืŸ ืึทืœืข, ืึธื‘ืขืจ ืื™ืš ื•ื•ืขืœ ืฉื˜ืขืœืŸ ืื™ืŸ ื“ื™ ืงืึธื“ ื‘ืึทืคืขืจ ื ื™ืฉื˜ ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก ืื™ืŸ ืึทืœืข, ืึธื‘ืขืจ ืึธื ื•ื•ื™ื™ึทื– ืฆื• Binaryen ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืกื˜ืจืึทืงื˜ืฉืขืจื–, ืึทื–ื•ื™ ืื™ืš ื•ื•ืขืœ ื–ืึธื’ืŸ: 4 ื‘ื™ื˜ืขืก
  • ื•ื•ืึธืก ืึทืคึผืฉืึทื ืึทืœ ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก ื“ื™ ื‘ืึทืงืขื ื“ ืงืขื ืขืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ - ืžื™ืจ ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืึทืœืฅ ืžื™ืจ ื’ืขืคึฟื™ื ืขืŸ ืื™ืŸ Binaryen, ืœืึธื–ืŸ ื“ื™ ืึทืงืกืขืœืขืจืึทื˜ืึธืจ ื‘ืจืขื›ืŸ ื“ื™ ืžื ื•ื—ื” ืื™ืŸ ืกื™ืžืคึผืœืขืจ ืึธื ืขืก ื–ื™ืš
  • ื•ื•ืึธืก ืื™ื– ื“ื™ ื“ืขืจื ืขื ื˜ืขืจื  ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ TLB ืงืึทืฉ ื’ืขื‘ืขื˜ืŸ ื“ื•ืจืš ื“ื™ ื‘ืึทืงืขื ื“. ื“ืขืจ ืคืึทืงื˜ ืื™ื– ืึทื– ืื™ืŸ QEMU ืึทืœืฅ ืื™ื– ืขืจื ืกื˜: ื›ืึธื˜ืฉ ืขืก ื–ืขื ืขืŸ ื”ืขืœืคึผืขืจ ืคืึทื ื’ืงืฉืึทื ื– ื•ื•ืึธืก ื“ื•ืจื›ืคื™ืจืŸ ืžืึทืกืข / ืงืจืึธื ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ื“ื™ ื’ืึทืกื˜ MMU (ื•ื•ืื• ื•ื•ืึธืœื˜ ืžื™ืจ ื–ื™ื™ืŸ ืึธืŸ ืขืก ืื™ืฆื˜?), ื–ื™ื™ ืจืึทื˜ืขื•ื•ืขืŸ ื–ื™ื™ืขืจ ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ืงืึทืฉ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึท ืกื˜ืจื•ืงื˜ื•ืจ, ื“ื™ ืคึผืจืึทืกืขืกื™ื ื’ ืคื•ืŸ ื•ื•ืึธืก ืื™ื– ื‘ืึทืงื•ื•ืขื ืฆื• ื™ืžื‘ืขื“ ื’ืœื™ื™ึทืš ืื™ืŸ ื‘ืจืึธื“ืงืึทืกื˜ ื‘ืœืึทืงืก. ื“ื™ ืงืฉื™ื ืื™ื–, ื•ื•ืึธืก ืคืึธื˜ืึธ ืื™ืŸ ื“ืขื ืกื˜ืจื•ืงื˜ื•ืจ ืื™ื– ืžืขืจืกื˜ ื™ืคื™ืฉืึทื ื˜ืœื™ ืคึผืจืึทืกืขืกื˜ ื“ื•ืจืš ืึท ืงืœื™ื™ืŸ ืื•ืŸ ืฉื ืขืœ ืกื™ืงื•ื•ืึทื ืก ืคื•ืŸ ืงืึทืžืึทื ื“ื–?
  • ื“ืึธ ืื™ืจ ืงืขื ืขืŸ ื˜ื•ื•ื™ืง ื“ื™ ืฆื™ืœ ืคื•ืŸ ืื™ื™ืŸ ืึธื“ืขืจ ืฆื•ื•ื™ื™ ืจืขื–ืขืจื•ื•ื™ืจื˜ ืจืขื“ื–ืฉื™ืกื˜ืขืจื–, ื’ืขื‘ืŸ ื˜ื‘ ืจื•ืคืŸ ื“ื•ืจืš ืึท ืคึฟื•ื ืงืฆื™ืข ืื•ืŸ ืึธืคึผื˜ื™ืึธื ืึทืœืœื™ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืขื˜ืœืขื›ืข ืงืœื™ื™ืŸ inline-ืคื•ื ืงืฆื™ืขืก ื•ื•ื™ flush_icache_range (ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืื•ื ื“ื–ืขืจ ืคืึทืœ)

ื˜ืขืงืข tcg-target.inc.c, ืคื•ืŸ ืงื•ืจืก, ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืคื™ืœ ื’ืจืขืกืขืจืข ืื™ืŸ ื’ืจื™ื™ืก ืื•ืŸ ื›ึผื•ืœืœ ืขื˜ืœืขื›ืข ืžืึทื ื“ืึทื˜ืึธืจื™ ืคืึทื ื’ืงืฉืึทื ื–:

  • ื™ื ื™ื˜ื™ืึทืœื™ื–ืึทื˜ื™ืึธืŸ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืจื™ืกื˜ืจื™ืงืฉืึทื ื– ืื•ื™ืฃ ื•ื•ืึธืก ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืงืขื ืขืŸ ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ื•ื•ืึธืก ืึธืคึผืขืจืึทื ื“ื–. ื‘ืœื™ื™ื˜ืึทื ื˜ืœื™ ืงืึทืคึผื™ื“ ื“ื•ืจืš ืžื™ืจ ืคื•ืŸ ืืŸ ืื ื“ืขืจ ื‘ืึทืงืขื ื“
  • ืคื•ื ืงืฆื™ืข ื•ื•ืึธืก ื ืขืžื˜ ืื™ื™ืŸ ื™ื ืขืจืœืขืš ื‘ื™ื˜ืขืงืึธื“ืข ืœื™ืžืขื“
  • ืื™ืจ ืงืขื ืขืŸ ืื•ื™ืš ืฉื˜ืขืœืŸ ืึทื’ื–ื™ืœื™ืขืจื™ ืคืึทื ื’ืงืฉืึทื ื– ื“ืึธ, ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืื•ื™ืš ื ื•ืฆืŸ ืกื˜ืึทื˜ื™ืง ืคืึทื ื’ืงืฉืึทื ื– ืคึฟื•ืŸ tcg/tcg.c

ืคึฟืึทืจ ื–ื™ืš, ืื™ืš ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืกื˜ืจืึทื˜ืขื’ื™ืข: ืื™ืŸ ื“ื™ ืขืจืฉื˜ืขืจ ื•ื•ืขืจื˜ืขืจ ืคื•ืŸ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ื‘ืœืึธืง, ืื™ืš ื’ืขืฉืจื™ื‘ืŸ ืคื™ืจ ืคึผื•ื™ื ื˜ืขืจื–: ืึท ืึธื ื”ื™ื™ื‘ ืฆื™ื™ื›ืŸ (ืึท ื–ื™ื›ืขืจ ื•ื•ืขืจื˜ ืื™ืŸ ื“ืขืจ ื’ืขื’ื ื˜ 0xFFFFFFFF, ื•ื•ืึธืก ื‘ืืฉืœืืกืŸ ื“ื™ ืงืจืึทื ื˜ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ื˜ื‘), ืงืึธื ื˜ืขืงืกื˜, ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืžืึธื“ื•ืœืข ืื•ืŸ ืžืึทื’ื™ืฉ ื ื•ืžืขืจ ืคึฟืึทืจ ื“ื™ื‘ืึทื’ื™ื ื’. ืื™ืŸ ืขืจืฉื˜ืขืจ ื“ื™ ืžืึทืจืง ืื™ื– ื’ืขื•ื•ืขืŸ ืฉื˜ืขืœืŸ ืื™ืŸ 0xFFFFFFFF - nื•ื•ื• n - ืึท ืงืœื™ื™ืŸ positive ื ื•ืžืขืจ, ืื•ืŸ ื™ืขื“ืขืจ ืžืึธืœ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื“ื•ืจืš ื“ื™ ื™ื‘ืขืจื–ืขืฆืขืจ ืขืก ื’ืขื•ื•ืืงืกืŸ ืžื™ื˜ 1. ื•ื•ืขืŸ ืขืก ืจื™ื˜ืฉื˜ 0xFFFFFFFE, ื–ืึทืžืœื•ื ื’ ืื™ื– ืคืืจื’ืขืงื•ืžืขืŸ, ื“ืขืจ ืžืึธื“ื•ืœืข ืื™ื– ื’ืขืจืื˜ืขื•ื•ืขื˜ ืื™ืŸ ื“ื™ ืคื•ื ืงืฆื™ืข ื˜ื™ืฉ, ื™ืžืคึผืึธืจื˜ื™ื“ ืื™ืŸ ืึท ืงืœื™ื™ืŸ "ืœืึทื•ื ื˜ืฉืขืจ", ืื™ืŸ ื•ื•ืึธืก ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืื™ื– ื’ืขื•ื•ืขืŸ ืคึฟื•ืŸ tcg_qemu_tb_exec, ืื•ืŸ ื“ืขืจ ืžืึธื“ื•ืœืข ืื™ื– ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ืคื•ืŸ QEMU ื–ื›ึผืจื•ืŸ.

ืฆื• ืคึผืึทืจืึทืคืจืึทื– ื“ื™ ืงืœืึทืกื™ืงืก, "ืงืจื•ื˜ืฉ, ื•ื•ื™ ืคื™ืœ ืื™ื– ื™ื ื˜ืขืจื˜ื•ื•ื™ื™ื ื“ ืื™ืŸ ื“ืขื ื’ืขื–ื•ื ื˜ ืคึฟืึทืจ ื“ื™ ืคึผืจืึธื’ืขืจ ืก ื”ืึทืจืฅ ...". ืึธื‘ืขืจ, ื“ืขืจ ื–ื›ึผืจื•ืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ืœื™ืงื™ื ื’ ืขืจื’ืขืฅ. ื“ืขืจืฆื•, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื–ื™ืงืึธืจืŸ ื’ืขืจืื˜ืŸ ื“ื•ืจืš QEMU! ืื™ืš ื”ืื‘ ื’ืขื”ืื˜ ื ืงืื•ื“ ืื– ื•ื•ืขืŸ ืžืขืŸ ืฉืจื™ื™ื‘ื˜ ื“ื™ ืงื•ืžืขื ื“ื™ื’ืข ืื™ื ืกื˜ืจื•ืงืฆื™ืข (ื ื•, ื“ืืก ื”ื™ื™ืกื˜ ื ืฆื™ื™ื›ืขืจ) ื”ืื˜ ืžืขืŸ ืื•ื™ืกื’ืขืžืขืงื˜ ื“ืขื ื•ื•ืืก ื–ื™ื™ืŸ ืœื™ื ืง ืื™ื– ื’ืขื•ื•ืขืŸ ืคืจื™ืขืจ ืื•ื™ืฃ ื“ืขื ืคืœืืฅ, ืื‘ืขืจ ื“ืืก ื”ืื˜ ื ื™ืฉื˜ ื’ืขื”ืืœืคืŸ. ืึทืงื˜ื•ืึทืœืœื™, ืื™ืŸ ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ืคืึทืœ, QEMU ืึทืœืึทืงื™ื™ืฅ ื–ื›ึผืจื•ืŸ ื‘ื™ื™ ืกื˜ืึทืจื˜ืึทืคึผ ืื•ืŸ ืฉืจื™ื™ื‘ื˜ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืงืึธื“ ื“ืึธืจื˜. ื•ื•ืขืŸ ื“ืขืจ ื‘ืึทืคืขืจ ืœื•ื™ืคื˜ ืื•ื™ืก, ื“ื™ ืงืึธื“ ืื™ื– ืืจืœื ื’ืขื•ื•ืืจืคืŸ ืื•ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืื™ื™ื ืขืจ ื”ื™ื™ื‘ื˜ ืฆื• ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ื–ื™ื™ึทืŸ ืึธืจื˜.

ื ืึธืš ื’ืขืœืขืจื ื˜ ื“ืขื ืงืึธื“, ืื™ืš ืื™ื™ื ื’ืขื–ืขืŸ ืึทื– ื“ืขืจ ืงื•ื ืฅ ืžื™ื˜ ื“ื™ ืžืึทื’ื™ืฉ ื ื•ืžืขืจ ืขืจืœื•ื™ื‘ื˜ ืžื™ืจ ื ื™ืฉื˜ ืฆื• ืคืึทืจืœืึธื–ืŸ ืื•ื™ืฃ ืงื•ืคึผืข ืฆืขืฉื˜ืขืจื•ื ื’ ื“ื•ืจืš ืคืจื™ื™ ืขืคึผืขืก ืคืึทืœืฉ ืื•ื™ืฃ ืึท ืึทื ื™ื ื™ืฉื™ืึทืœื™ื™ื–ื“ ื‘ืึทืคืขืจ ืื•ื™ืฃ ื“ืขืจ ืขืจืฉื˜ืขืจ ืคืึธืจืŸ. ืื‘ืขืจ ื•ื•ืขืจ ืจื™ืจื™ื™ื˜ ื“ื™ ื‘ืึทืคืขืจ ืฆื• ื‘ื™ื™ืคึผืึทืก ืžื™ื™ืŸ ืคึฟื•ื ืงืฆื™ืข ืฉืคึผืขื˜ืขืจ? ื•ื•ื™ ื“ื™ ืขืžืกืงืจื™ืคึผื˜ืขืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืจืขืงืึธืžืขื ื“ื™ืจืŸ, ื•ื•ืขืŸ ืื™ืš ื’ืขืœืืคืŸ ืื™ืŸ ืึท ืคึผืจืึธื‘ืœืขื, ืื™ืš ื˜ืจืึทื ืกืคึผืึธืจื˜ืึทื“ ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ืงืึธื“ ืฆื•ืจื™ืง ืฆื• ื“ื™ ื’ืขื‘ื•ื™ืจืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืฉื˜ืขืœืŸ ืžืึธื–ื™ืœืœืึท ืจืขืงืึธืจื“-ืจืขืคึผืœื™ื™ึท ืื•ื™ืฃ ืขืก ... ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืื™ืŸ ื“ื™ ืกื•ืฃ ืื™ืš ืื™ื™ื ื’ืขื–ืขืŸ ืึท ืคึผืฉื•ื˜ ื–ืึทืš: ืคึฟืึทืจ ื™ืขื“ืขืจ ื‘ืœืึธืง, ื struct TranslationBlock ืžื™ื˜ ื–ื™ื™ึทืŸ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’. ื˜ืจืขืคืŸ ื•ื•ื• ... ืึทื– ืก ืจืขื›ื˜, ืคึผื•ื ืงื˜ ืื™ื™ื“ืขืจ ื“ื™ ื‘ืœืึธืง ืจืขื›ื˜ ืื™ืŸ ื“ื™ ื‘ืึทืคืขืจ. ืื™ืš ื”ืึธื‘ ื“ืึธืก ืื™ื™ื ื’ืขื–ืขืŸ, ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคืึทืจืœืึธื–ืŸ ื ื™ืฆืŸ ืงืจืึทื˜ืฉื™ื– (ืœืคึผื—ื•ืช ืขื˜ืœืขื›ืข), ืื•ืŸ ืคืฉื•ื˜ ื•ื•ืึทืจืคืŸ ืื•ื™ืก ื“ื™ ืžืึทื’ื™ืฉ ื ื•ืžืขืจ, ืื•ืŸ ื˜ืจืึทื ืกืคืขืจื“ ื“ื™ ืจื•ืขืŸ ื•ื•ืขืจื˜ืขืจ ืฆื• struct TranslationBlock, ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ืื™ื™ืŸ ืœื™ื ื’ืงื˜ ืจืฉื™ืžื” ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืฉื•ื•ื™ื ื“ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ื•ื•ืขืŸ ื“ื™ ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ืงืึทืฉ ืื™ื– ื‘ืึทืฉื˜ืขื˜ื™ืง, ืื•ืŸ ืคืจื™ื™ ื–ื™ืงืึธืจืŸ.

ืขื˜ืœืขื›ืข ืงืจืึทื˜ืฉื™ื– ื‘ืœื™ื™ึทื‘ืŸ: ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื ื’ืขืฆื™ื™ื›ื ื˜ ืคึผื•ื™ื ื˜ืขืจื– ืื™ืŸ ื“ื™ ืงืึธื“ ื‘ืึทืคืขืจ - ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ ื–ืขื ืขืŸ ืคืฉื•ื˜ BinaryenExpressionRef, ื“ืึธืก ืื™ื–, ื–ื™ื™ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืื•ื™ืกื“ืจื•ืงืŸ ื•ื•ืึธืก ื“ืึทืจืคึฟืŸ ืฆื• ื–ื™ื™ืŸ ืœื™ื ืขืึทืจืœื™ ืฉื˜ืขืœืŸ ืื™ืŸ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื™ืงืขืจื“ื™ืง ื‘ืœืึธืง, ื˜ื™ื™ืœ ืื™ื– ื“ืขืจ ืฆื•ืฉื˜ืึทื ื“ ืคึฟืึทืจ ื™ื‘ืขืจื’ืึทื ื’ ืฆื•ื•ื™ืฉืŸ BBs, ื˜ื™ื™ืœ ืื™ื– ื•ื•ื• ืฆื• ื’ื™ื™ืŸ. ื ื•, ืขืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ืฆื•ื’ืขื’ืจื™ื™ื˜ ื‘ืœืึทืงืก ืคึฟืึทืจ ืจืขืœืึธืคึผืขืจ ื•ื•ืึธืก ื“ืึทืจืคึฟืŸ ืฆื• ื–ื™ื™ืŸ ืคืืจื‘ื•ื ื“ืŸ ืœื•ื™ื˜ ื“ื™ ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ. ืฆื• ื•ื™ืกื˜ื™ื™ืœืŸ ื–ื™ื™, ื“ื™ ื”ืึทืฉืึธืจืข ืื™ื– ื’ืขื ื™ืฆื˜ ืึทื– ื–ื™ื™ ื–ืขื ืขืŸ ืึทืœืข ืึทืœื™ื™ื ื“ ืžื™ื˜ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ืคื™ืจ ื‘ื™ื˜ืขืก, ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื‘ืขืฉืึธืœืขื ื ื•ืฆืŸ ื“ื™ ืงืœืขื ืกื˜ืขืจ ื‘ืึทื˜ื™ื™ื˜ื™ืง ืฆื•ื•ื™ื™ ื‘ื™ื˜ืŸ ืคึฟืึทืจ ื“ื™ ืคื™ืจืžืข, ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขื“ืขื ืงืขืŸ ืฆื• ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ืขืก ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง. ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืึทื–ืึท ืœืึทื‘ืขืœืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ื’ืขื ื™ืฆื˜ ืื™ืŸ QEMU ืฆื• ืึธื ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืกื™ื‘ื” ืคึฟืึทืจ ืึทืจื•ื™ืกื’ืึทื ื’ ื“ื™ TCG ืฉืœื™ื™ืฃ.

ื ื™ืฆืŸ Binaryen

ืžืึธื“ื•ืœืขืก ืื™ืŸ ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™ ืึทื ื˜ื”ืึทืœื˜ืŸ ืคืึทื ื’ืงืฉืึทื ื–, ื™ืขื“ืขืจ ืคื•ืŸ ื•ื•ืึธืก ื›ึผื•ืœืœ ืึท ื’ื•ืฃ, ื•ื•ืึธืก ืื™ื– ืึทืŸ ืื•ื™ืกื“ืจื•ืง. ืขืงืกืคึผืจืขืกืกื™ืึธื ืก ื–ืขื ืขืŸ ื•ื ืึทืจื™ ืื•ืŸ ื‘ื™ื™ื ืขืจื™ ืึทืคึผืขืจื™ื™ืฉืึทื ื–, ื‘ืœืึทืงืก ืงืึทื ืกื™ืกื˜ื™ื ื’ ืคื•ืŸ ืจืฉื™ืžื•ืช ืคื•ืŸ ืื ื“ืขืจืข ืื•ื™ืกื“ืจื•ืงืŸ, ืงืึธื ื˜ืจืึธืœ ืœื•ื™ืคืŸ, ืืื–"ื• ื•. ื•ื•ื™ ืื™ืš ืฉื•ื™ืŸ ื’ืขื–ืื’ื˜, ืงืึธื ื˜ืจืึธืœ ืœื•ื™ืคืŸ ื“ืึธ ืื™ื– ืึธืจื’ืึทื ื™ื–ื™ืจื˜ ืคึผื•ื ืงื˜ ื•ื•ื™ ื”ื•ื™ืš-ืžื“ืจื’ื” ืฆื•ื•ื™ื™ื’ืŸ, ืœื•ืคึผืก, ืคึฟื•ื ืงืฆื™ืข ืจื•ืคื˜, ืืื–"ื• ื•. ืึทืจื’ื•ืžืขื ื˜ืŸ ืฆื• ืคืึทื ื’ืงืฉืึทื ื– ื–ืขื ืขืŸ ื ื™ืฉื˜ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืื•ื™ืฃ ื“ื™ ืึธื ืœื™ื™ื’ืŸ, ืึธื‘ืขืจ ื‘ืคื™ืจื•ืฉ, ืคึผื•ื ืงื˜ ื•ื•ื™ ืื™ืŸ JS. ืขืก ื–ืขื ืขืŸ ืื•ื™ืš ื’ืœืื‘ืืœืข ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ืึธื‘ืขืจ ืื™ืš ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื’ืขื•ื•ื™ื™ื ื˜ ื–ื™ื™, ืึทื–ื•ื™ ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ื–ืึธื’ืŸ ืื™ืจ ื•ื•ืขื’ืŸ ื–ื™ื™.

ืคืึทื ื’ืงืฉืึทื ื– ืื•ื™ืš ื”ืึธื‘ืŸ ื”ื™ื’ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ื’ืขืฆื™ื™ืœื˜ ืคึฟื•ืŸ ื ื•ืœ, ืคื•ืŸ ื˜ื™ืคึผ: int32 / int64 / float / double. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ืขืจ ืขืจืฉื˜ืขืจ n ื”ื™ื’ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื–ืขื ืขืŸ ื“ื™ ืึทืจื’ื•ืžืขื ื˜ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ื“ื™ ืคึฟื•ื ืงืฆื™ืข. ื‘ื™ื˜ืข ื˜ืึธืŸ ืึทื– ื›ืึธื˜ืฉ ืึทืœืฅ ื“ืึธ ืื™ื– ื ื™ืฉื˜ ื’ืึธืจ ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ืื™ืŸ ื˜ืขืจืžื™ื ืขืŸ ืคื•ืŸ ืงืึธื ื˜ืจืึธืœ ืœื•ื™ืคืŸ, ื™ื ื˜ืึทื“ื–ืฉืขืจื– ื ืึธืš ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ื“ื™ "ื’ืขื—ืชืžืขื˜ / ืึทื ืกื™ื™ื ื“" ืึทื˜ืจื™ื‘ื™ื•ื˜: ื•ื•ื™ ื“ื™ ื ื•ืžืขืจ ื‘ื™ื›ื™ื™ื•ื•ื– ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืงืึธื“.

ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, Binaryen ื’ื™ื˜ ืคึผืฉื•ื˜ C-ืึทืคึผื™: ืื™ืจ ืฉืึทืคึฟืŸ ืึท ืžืึธื“ื•ืœืข, ืื™ืŸ ืื™ื ืฉืึทืคึฟืŸ ืื•ื™ืกื“ืจื•ืงืŸ - ื•ื ืึทืจื™, ื‘ื™ื™ื ืขืจื™, ื‘ืœืึทืงืก ืคื•ืŸ ืื ื“ืขืจืข ืื•ื™ืกื“ืจื•ืงืŸ, ืงืึธื ื˜ืจืึธืœ ืœื•ื™ืคืŸ, ืขื˜ืง. ื“ืขืจื ืึธืš ืื™ืจ ืžืึทื›ืŸ ืึท ืคึฟื•ื ืงืฆื™ืข ืžื™ื˜ ืึทืŸ ืื•ื™ืกื“ืจื•ืง ื•ื•ื™ ื–ื™ื™ึทืŸ ื’ื•ืฃ. ืื•ื™ื‘ ืื™ืจ, ื•ื•ื™ ืžื™ืจ, ื”ืึธื‘ืŸ ืึท ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ื™ื‘ืขืจื’ืึทื ื’ ื’ืจืึทืคื™ืง, ื“ื™ ืจืขืœืึธืคึผืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ื•ื•ืขื˜ ื”ืขืœืคืŸ ืื™ืจ. ื•ื•ื™ ื•ื•ื™ื™ื˜ ืื™ืš ืคืืจืฉื˜ื™ื™ ืื™ื– ืขืก ืžืขื’ืœืขืš ืฆื• ื ื•ืฆืŸ ื”ื•ื™ืš-ืžื“ืจื’ื” ืงืึธื ื˜ืจืึธืœ ืคื•ืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืœื•ื™ืคืŸ ืื™ืŸ ืึท ื‘ืœืึธืง, ื•ื•ื™ ืœืึทื ื’ ื•ื•ื™ ืขืก ื’ื™ื™ื˜ ื ื™ืฉื˜ ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ื“ื™ ื‘ืึทื•ื ื“ืจื™ื– ืคื•ืŸ ื“ื™ ื‘ืœืึธืง - ื“ืึธืก ืื™ื–, ืขืก ืื™ื– ืžืขื’ืœืขืš ืฆื• ืžืึทื›ืŸ ื™ื ืขืจืœืขืš ืฉื ืขืœ ื“ืจืš / ืคึผืึทืžืขืœืขืš ื•ื•ืขื’ ื‘ืจืึทื ื˜ืฉื™ื ื’ ืื™ืŸ ื“ื™ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ TLB ืงืึทืฉ ืคึผืจืึทืกืขืกื™ื ื’ ืงืึธื“, ืึธื‘ืขืจ ื ื™ืฉื˜ ืฆื• ืึทืจื™ื™ึทื ืžื™ืฉื  ื–ื™ืš ืžื™ื˜ ื“ื™ "ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง" ืงืึธื ื˜ืจืึธืœ ืœื•ื™ืคืŸ. ื•ื•ืขืŸ ืื™ืจ ื‘ืึทืคืจื™ื™ืขืŸ ืึท ืจืขืœืึธืคึผืขืจ, ื–ื™ื™ืŸ ื‘ืœืึทืงืก ื–ืขื ืขืŸ ื‘ืืคืจื™ื™ื˜; ื•ื•ืขืŸ ืื™ืจ ืคืจื™ื™ ืึท ืžืึธื“ื•ืœืข, ื“ื™ ืื•ื™ืกื“ืจื•ืงืŸ, ืคืึทื ื’ืงืฉืึทื ื–, ืืื–"ื• ื•. ืืจืขื ืข.

ืึธื‘ืขืจ, ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื˜ื™ื™ึทื˜ืฉืŸ ืงืึธื“ ืื•ื™ืฃ ื“ื™ ืคืœื™ืขืŸ ืึธืŸ ื•ืžื ื™ื™ื˜ื™ืง ืฉืึทืคื•ื ื’ ืื•ืŸ ื“ื™ืœื™ืฉืึทืŸ ืคื•ืŸ ืึท ื™ื‘ืขืจื–ืขืฆืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืขืก ืงืขืŸ ื–ื™ื™ืŸ ื–ื™ื ืขืŸ ืฆื• ืฉื˜ืขืœืŸ ื“ืขื ืœืึธื’ื™ืง ืื™ืŸ ืึท C ++ ื˜ืขืงืข, ืื•ืŸ ืคึฟื•ืŸ ื“ืึธืจื˜ ื’ืœื™ื™ึทืš ืคื™ืจืŸ ื“ื™ ื’ืื ืฆืข C ++ API ืคื•ืŸ ื“ืขืจ ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ื‘ื™ื™ืคึผืึทืกื™ื ื’ ื’ืจื™ื™ื˜- ื’ืขืžืื›ื˜ ืจืึทืคึผืขืจื–.

ืึทื–ื•ื™ ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื“ื™ ืงืึธื“ ืื™ืจ ื“ืึทืจืคึฟืŸ

// ะฝะฐัั‚ั€ะพะธั‚ัŒ ะณะปะพะฑะฐะปัŒะฝั‹ะต ะฟะฐั€ะฐะผะตั‚ั€ั‹ (ะผะพะถะฝะพ ะฟะพะผะตะฝัั‚ัŒ ะฟะพั‚ะพะผ)
BinaryenSetAPITracing(0);

BinaryenSetOptimizeLevel(3);
BinaryenSetShrinkLevel(2);

// ัะพะทะดะฐั‚ัŒ ะผะพะดัƒะปัŒ
BinaryenModuleRef MODULE = BinaryenModuleCreate();

// ะพะฟะธัะฐั‚ัŒ ั‚ะธะฟั‹ ั„ัƒะฝะบั†ะธะน (ะบะฐะบ ัะพะทะดะฐะฒะฐะตะผั‹ั…, ั‚ะฐะบ ะธ ะฒั‹ะทั‹ะฒะฐะตะผั‹ั…)
helper_type  BinaryenAddFunctionType(MODULE, "helper-func", BinaryenTypeInt32(), int32_helper_args, ARRAY_SIZE(int32_helper_args));
// (int23_helper_args ะฟั€ะธะพะฑ^WัะพะทะดะฐัŽั‚ัั ะพั‚ะดะตะปัŒะฝะพ)

// ัะบะพะฝัั‚ั€ัƒะธั€ะพะฒะฐั‚ัŒ ััƒะฟะตั€-ะผะตะณะฐ ะฒั‹ั€ะฐะถะตะฝะธะต
// ... ะฝัƒ ั‚ัƒั‚ ัƒะถ ะฒั‹ ะบะฐะบ-ะฝะธะฑัƒะดัŒ ัะฐะผะธ :)

// ะฟะพั‚ะพะผ ัะพะทะดะฐั‚ัŒ ั„ัƒะฝะบั†ะธัŽ
BinaryenAddFunction(MODULE, "tb_fun", tb_func_type, func_locals, FUNC_LOCALS_COUNT, expr);
BinaryenAddFunctionExport(MODULE, "tb_fun", "tb_fun");
...
BinaryenSetMemory(MODULE, (1 << 15) - 1, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
BinaryenAddMemoryImport(MODULE, NULL, "env", "memory", 0);
BinaryenAddTableImport(MODULE, NULL, "env", "tb_funcs");

// ะทะฐะฟั€ะพัะธั‚ัŒ ะฒะฐะปะธะดะฐั†ะธัŽ ะธ ะพะฟั‚ะธะผะธะทะฐั†ะธัŽ ะฟั€ะธ ะถะตะปะฐะฝะธะธ
assert (BinaryenModuleValidate(MODULE));
BinaryenModuleOptimize(MODULE);

... ืื•ื™ื‘ ืื™ืš ืคืืจื’ืขืกืŸ ืขืคึผืขืก, ืื ื˜ืฉื•ืœื“ื™ื’ื˜, ื“ืึธืก ืื™ื– ื ืึธืจ ืฆื• ืคืึธืจืฉื˜ืขืœืŸ ื“ื™ ื•ื•ืึธื’, ืื•ืŸ ื“ื™ ื“ืขื˜ืึทื™ืœืก ื–ืขื ืขืŸ ืื™ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ.

ืื•ืŸ ืื™ืฆื˜ ื”ื™ื™ื‘ื˜ ื–ื™ืš ืืŸ ื“ื™ ืงืจืึทืง-ืคืขืงืก-ืคึผืขืงืก, ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

static char buf[1 << 20];
BinaryenModuleOptimize(MODULE);
BinaryenSetMemory(MODULE, 0, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
int sz = BinaryenModuleWrite(MODULE, buf, sizeof(buf));
BinaryenModuleDispose(MODULE);
EM_ASM({
  var module = new WebAssembly.Module(new Uint8Array(wasmMemory.buffer, $0, $1));
  var fptr = $2;
  var instance = new WebAssembly.Instance(module, {
      'env': {
          'memory': wasmMemory,
          // ...
      }
  );
  // ะธ ะฒะพั‚ ัƒะถะต ัƒ ะฒะฐั ะตัั‚ัŒ instance!
}, buf, sz);

ืื™ืŸ ืกื“ืจ ืฆื• ืขืคืขืก ืคืึทืจื‘ื™ื ื“ืŸ ื“ื™ ื•ื•ืขืœื˜ืŸ ืคื•ืŸ QEMU ืื•ืŸ JS ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ ื’ืขืฉื•ื•ื™ื ื“ ืึทืงืกืขืก ื“ื™ ืงืึทืžืคึผื™ื™ืœื“ ืคืึทื ื’ืงืฉืึทื ื–, ืึท ืžืขื ื’ืข ืื™ื– ื‘ืืฉืืคืŸ (ืึท ื˜ื™ืฉ ืคื•ืŸ ืคืึทื ื’ืงืฉืึทื ื– ืคึฟืึทืจ ืึทืจื™ื™ึทื ืคื™ืจ ืื™ืŸ ื“ื™ ืœืึธื ื˜ืฉืขืจ), ืื•ืŸ ื“ื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืคืึทื ื’ืงืฉืึทื ื– ื–ืขื ืขืŸ ื’ืขืฉื˜ืขืœื˜ ื“ืึธืจื˜. ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืจืขื›ืขื ืขืŸ ื“ื™ ืื™ื ื“ืขืงืก, ื“ืขืจ ืื™ื ื“ืขืงืก ืคื•ืŸ ื“ื™ ื ื•ืœ ื•ื•ืึธืจื˜ ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ื‘ืœืึธืง ืื™ื– ื˜ื›ื™ืœืขืก ื’ืขื ื™ืฆื˜ ื•ื•ื™ ืขืก, ืึธื‘ืขืจ ื“ืขืžืึธืœื˜ ื“ืขืจ ืื™ื ื“ืขืงืก ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“ ืžื™ื˜ ื“ืขื ืคืึธืจืžื•ืœืข ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืคืฉื•ื˜ ืคึผืึทืกื™ืง ืื™ืŸ ื“ื™ ืคืขืœื“ ืื™ืŸ struct TranslationBlock.

ื“ื•ืจืš ื“ื™ ื•ื•ืขื’, ื“ืขืžืึธ (ื“ืขืจื•ื•ื™ื™ึทืœ ืžื™ื˜ ืึท ืžืขืจืงื™ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ) ืึทืจื‘ืขื˜ ื ืึธืจ ื’ื•ื˜ ืื™ืŸ Firefox. ืงืจืึธื•ื ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืขืคืขืก ื ื™ืฉื˜ ื’ืจื™ื™ื˜ ืฆื• ื“ืขื ืคืึทืงื˜ ืึทื– ืขืžืขืฆืขืจ ื•ื•ืึธืœื˜ ื•ื•ืขืœืŸ ืฆื• ืฉืึทืคึฟืŸ ืžืขืจ ื•ื•ื™ ืึท ื˜ื•ื™ื–ื ื˜ ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™ ืžืึทื“ื–ืฉื•ืœื–, ืึทื–ื•ื™ ื–ื™ื™ ืคืฉื•ื˜ ืึทืœืึทืงื™ื™ื˜ื™ื“ ืึท ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืึทื“ืจืขืก ืคึผืœืึทืฅ ืคึฟืึทืจ ื™ืขื“ืขืจ ...

ืึทื– ืก ืึทืœืข ืคึฟืึทืจ ืื™ืฆื˜. ื˜ืึธืžืขืจ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืืŸ ืื ื“ืขืจ ืึทืจื˜ื™ืงืœ ืื•ื™ื‘ ืขืžืขืฆืขืจ ืื™ื– ืื™ื ื˜ืขืจืขืกื™ืจื˜. ื ืึทืžืขืœื™, ืขืก ื‘ืœื™ื™ื‘ื˜ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ื‘ืœื•ื™ื– ืžืึทื›ืŸ ื‘ืœืึธืง ื“ืขื•ื•ื™ืกืขืก ืึทืจื‘ืขื˜. ืขืก ืงืขืŸ ืื•ื™ืš ืžืึทื›ืŸ ื–ื™ื ืขืŸ ืฆื• ืžืึทื›ืŸ ื“ื™ ื–ืึทืžืœื•ื ื’ ืคื•ืŸ ื•ื•ืขื‘ืึทืกืกืขืžื‘ืœื™ ืžืึทื“ื–ืฉื•ืœื– ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก, ื•ื•ื™ ืื™ื– ืงืึทืกื˜ืึทืžืขืจื™ ืื™ืŸ ื“ื™ JS ื•ื•ืขืœื˜, ื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ื ืึธืš ืึทืŸ ื™ื‘ืขืจื–ืขืฆืขืจ ื•ื•ืึธืก ืงืขื ืขืŸ ื˜ืึธืŸ ื“ืึธืก ืึทืœืฅ ื‘ื™ื– ื“ื™ ื’ืขื‘ื•ื™ืจืŸ ืžืึธื“ื•ืœืข ืื™ื– ื’ืจื™ื™ื˜.

ืฆื•ื ืกื•ืฃ ืึท ืจืขื˜ืขื ื™ืฉ: ืื™ืจ ื”ืึธื˜ ืฆื•ื ื•ื™ืคื’ืขืฉื˜ืขืœื˜ ืึท ื‘ื™ื™ื ืขืจื™ ืื•ื™ืฃ ืึท 32-ื‘ื™ืกืœ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ, ืึธื‘ืขืจ ื“ื™ ืงืึธื“, ื“ื•ืจืš ื–ื›ึผืจื•ืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ื–, ืงืœื™ื™ืžื– ืคึฟื•ืŸ Binaryen, ืขืจื’ืขืฅ ืื•ื™ืฃ ื“ื™ ืึธื ืœื™ื™ื’ืŸ ืึธื“ืขืจ ืขืจื’ืขืฅ ืึทื ื“ืขืจืฉ ืื™ืŸ ื“ืขืจ ืื•ื™ื‘ืขืจืฉื˜ืขืจ 2 ื’ื™ื’ืื‘ื™ื™ื˜ ืคื•ืŸ ื“ื™ 32-ื‘ื™ืกืœ ืึทื“ืจืขืก ืคึผืœืึทืฅ. ื“ื™ ืคึผืจืึธื‘ืœืขื ืื™ื– ืึทื– ืคึฟื•ืŸ Binaryen ืก ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ื“ืึธืก ืื™ื– ืึทืงืกืขืก ืฆื• ืึท ื’ืจื•ื™ืก ืจืขื–ื•ืœื˜ืึทื˜ ืึทื“ืจืขืก. ื•ื•ื™ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึทืจื•ื ื“ืขื?

ืื™ืŸ ื“ื™ ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ื™ื•ื•ืข ื•ื•ืขื’

ืื™ืš ื”ืึธื‘ ืขืก ื ื™ืฉื˜ ื’ืขื˜ืขืกื˜, ืึธื‘ืขืจ ืžืฒึทืŸ ืขืจืฉื˜ืขืจ ื’ืขื“ืึทื ืง ืื™ื– ื’ืขื•ื•ืขืŸ, "ื•ื•ืึธืก ืื•ื™ื‘ ืื™ืš ืื™ื ืกื˜ืึทืœื™ืจืŸ 32-ื‘ื™ื˜? Linux"ื“ืืŸ ื•ื•ืขื˜ ื“ืขืจ ืื•ื™ื‘ืขืจืฉื˜ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขื ืื“ืจืขืก-ืคืœืืฅ ืคืืจื ื•ืžืขืŸ ื•ื•ืขืจืŸ ื“ื•ืจืš ื“ืขื ืงืขืจื ืขืœ. ื“ื™ ืื™ื™ื ืฆื™ื’ืข ืคืจืื’ืข ืื™ื– ื•ื•ื™ืคื™ืœ ื•ื•ืขื˜ ืคืืจื ื•ืžืขืŸ ื•ื•ืขืจืŸ: 1 ืื“ืขืจ 2 ื’ื™ื’ืื‘ื™ื™ื˜."

ืื™ืŸ ืึท ืคึผืจืึธื’ืจืึทืžื™ืกื˜ ื•ื•ืขื’ (ืึธืคึผืฆื™ืข ืคึฟืึทืจ ืคึผืจืึทืงื˜ื™ืฉื ืขืจื–)

ื–ืืœ ืก ื‘ืœืึธื–ืŸ ืึท ื‘ืœืึธื– ืื™ืŸ ื“ื™ ืฉืคึผื™ืฅ ืคื•ืŸ ื“ื™ ืึทื“ืจืขืก ืคึผืœืึทืฅ. ืื™ืš ื–ื™ืš ื˜ืึธืŸ ื ื™ื˜ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ืึธืก ืขืก ืึทืจื‘ืขื˜ - ื“ืึธืจื˜ ืฉื•ื™ืŸ ืขืก ืžื•ื–ืŸ ื–ื™ื™ืŸ ืึท ืึธื ืœื™ื™ื’ืŸ. ืึธื‘ืขืจ "ืžื™ืจ ื–ืขื ืขืŸ ืคึผืจืึทืงื˜ื™ืฉื ืขืจื–: ืึทืœืฅ ืึทืจื‘ืขื˜ ืคึฟืึทืจ ืื•ื ื“ื–, ืึธื‘ืขืจ ืงื™ื™ืŸ ืื™ื™ื ืขืจ ื•ื•ื™ื™ืกื˜ ื•ื•ืึธืก ..."

// 2gbubble.c
// Usage: LD_PRELOAD=2gbubble.so <program>

#include <sys/mman.h>
#include <assert.h>

void __attribute__((constructor)) constr(void)
{
  assert(MAP_FAILED != mmap(1u >> 31, (1u >> 31) - (1u >> 20), PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
}

... ืขืก ืื™ื– ืืžืช ืึทื– ืขืก ืื™ื– ื ื™ืฉื˜ ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืžื™ื˜ Valgrind, ืึธื‘ืขืจ, ืฆื•ืž ื’ืœื™ืง, Valgrind ื–ื™ืš ื–ื™ื™ืขืจ ื™ืคืขืงื˜ื™ื•ื•ืœื™ ืคึผื•ืฉื™ื– ืึทืœืขืžืขืŸ ืื•ื™ืก ืคื•ืŸ ื“ืึธืจื˜ :)

ื˜ืึธืžืขืจ ืขืžืขืฆืขืจ ื•ื•ืขื˜ ื’ืขื‘ืŸ ืึท ื‘ืขืกืขืจ ื“ืขืจืงืœืขืจื•ื ื’ ืคื•ืŸ ื•ื•ื™ ื“ืขื ืงืึธื“ ืคื•ืŸ ืžื™ื™ึทืŸ ืึทืจื‘ืขื˜ ...

ืžืงื•ืจ: www.habr.com

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster