ืึทืืึธื ืืืืฃ ืึท ืฆืืึทื ืืื ืืึทืฉืืึธืกื ืคึฟืึทืจ ืฉืคึผืึทืก ืืึทืืืืึทืื ืื ืจืืืืขืจืกืึทืืืืืื ืคืื ืืขื ืคึผืจืึธืฆืขืก ืืื ืืขืจื ืขื ืืื ืฆื ืืืฉืขื ืขืจืืื ืืืฉืึทืืืึทืกืงืจืืคึผื (ืืขืจ ืืขื ืื, 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, ื ืื ืืขืจ ืคึผืจืืืขื ืืื ื ืฆื ืืืื ืืืืืืง ืืืฉืึทืืืึทืกืงืจืืคึผื ืงืึธื. ืืืืฃ ืื ืคืึทืจืงืขืจื, ืขืก ืืื ืจืืื ืืืื ืขืจื ืืื ืึธืคึผืืืืืืขื, ืืื ืืคืืื ืคืฉืื ืฉืจืืึทืื ืึท ืืึทื ืฅ ื ืืืขืจ ืืื ืขืก ืืื ื ืืฉื ืืืืขืจ ืคึผืฉืื: ืคึฟืึทืจ ืงืึทืืคึผืึทืงืื ืึทืก, ืขืก ืืื ืกืืึธืจื ืืื ืืขื ืคึฟืึธืจืืึทื. .
ืืืจ ืงืขื ืืึธืื ืืขืืขืจื ืืืขืื ืื ืจืขืืึธืคึผืื ื ืึทืืืขืจืืืึทื ืคึฟืึทืจ 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 ืืื : ืืืจ ืฉืึทืคึฟื ืึท ืืึธืืืืข, ืืื ืืื ืฉืึทืคึฟื ืืืืกืืจืืงื - ืื ืึทืจื, ืืืื ืขืจื, ืืืึทืงืก ืคืื ืื ืืขืจืข ืืืืกืืจืืงื, ืงืึธื ืืจืึธื ืืืืคื, ืขืืง. ืืขืจื ืึธื ืืืจ ืืึทืื ืึท ืคึฟืื ืงืฆืืข ืืื ืึทื ืืืืกืืจืืง ืืื ืืืึทื ืืืฃ. ืืืื ืืืจ, ืืื ืืืจ, ืืึธืื ืึท ื ืืืขืจืืง-ืืืจืื ืืืขืจืืึทื ื ืืจืึทืคืืง, ืื ืจืขืืึธืคึผืขืจ ืงืึธืืคึผืึธื ืขื ื ืืืขื ืืขืืคื ืืืจ. ืืื ืืืืื ืืื ืคืืจืฉืืื ืืื ืขืก ืืขืืืขื ืฆื ื ืืฆื ืืืื-ืืืจืื ืงืึธื ืืจืึธื ืคืื ืื ืืืจืืคืืจืื ื ืืืืคื ืืื ืึท ืืืึธืง, ืืื ืืึทื ื ืืื ืขืก ืืืื ื ืืฉื ืืืืึทืืขืจ ืคืื ืื ืืึทืื ืืจืื ืคืื ืื ืืืึธืง - ืืึธืก ืืื, ืขืก ืืื ืืขืืืขื ืฆื ืืึทืื ืื ืขืจืืขื ืฉื ืขื ืืจื / ืคึผืึทืืขืืขื ืืืขื ืืจืึทื ืืฉืื ื ืืื ืื ืืขืืืื-ืืื 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
