QEMU.js: แƒแƒฎแƒšแƒ แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒ˜ แƒ“แƒ WASM-แƒ˜แƒ—

แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ’แƒแƒกแƒแƒ แƒ—แƒแƒ‘แƒแƒ“ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ“แƒแƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒจแƒ”แƒฅแƒชแƒ”แƒ•แƒแƒ“แƒแƒ‘แƒ แƒ“แƒ แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”แƒ— แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— JavaScript (แƒฃแƒคแƒ แƒ แƒ–แƒฃแƒกแƒขแƒแƒ“, Asm.js) แƒ›แƒแƒœแƒฅแƒแƒœแƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒ“แƒแƒœ. แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก QEMU แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒก แƒ“แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฎแƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ Habr-แƒ–แƒ” แƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒ แƒกแƒขแƒแƒขแƒ˜แƒ. แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒจแƒ˜ แƒ›แƒ˜แƒ แƒฉแƒ˜แƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ’แƒแƒ“แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ WebAssembly-แƒจแƒ˜ แƒ“แƒ แƒ—แƒแƒ•แƒ˜แƒช แƒ“แƒแƒ›แƒ”แƒขแƒแƒ•แƒ”แƒ‘แƒ˜แƒœแƒ แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜... แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒ›แƒ˜แƒ“แƒ˜แƒแƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒซแƒแƒšแƒ˜แƒแƒœ แƒœแƒ”แƒšแƒ แƒ“แƒ แƒแƒฎแƒšแƒ, แƒแƒฎแƒšแƒแƒฎแƒแƒœแƒก แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜ แƒ—แƒ”แƒ›แƒแƒ–แƒ” "แƒ›แƒแƒจ แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜?" แƒฉแƒ”แƒ›แƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒกแƒแƒžแƒแƒกแƒฃแƒฎแƒแƒ“, แƒ›แƒ” แƒ’แƒแƒ•แƒ˜แƒ’แƒ” "แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒฐแƒ’แƒแƒ•แƒก". แƒ™แƒแƒ แƒ’แƒ˜, แƒ—แƒฃ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ, แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒขแƒแƒขแƒ˜แƒ. แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ•แƒ˜แƒœแƒ›แƒ”แƒก แƒ’แƒแƒ›แƒแƒแƒ“แƒ’แƒ”แƒก. แƒ›แƒ˜แƒกแƒ’แƒแƒœ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒ˜แƒ’แƒ”แƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒแƒฅแƒขแƒก QEMU แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก backend-แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒก Just-in-Time แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ”แƒ แƒ˜ แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ•แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”, แƒ แƒแƒ’แƒแƒ แƒ›แƒ” โ€žแƒ แƒแƒ’แƒแƒ แƒ›แƒ”โ€œ แƒ’แƒแƒ•แƒแƒขแƒแƒœแƒ QEMU JavaScript-แƒ–แƒ”, แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ”แƒก แƒ’แƒแƒœแƒ˜แƒ•แƒ แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ›แƒ”แƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒœแƒ แƒ“แƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒ’แƒแƒ›แƒ”แƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒœแƒ.

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜: แƒ’แƒแƒœแƒจแƒขแƒแƒ”แƒ‘แƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ

แƒฉแƒ”แƒ›แƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒงแƒ แƒฉแƒ”แƒ›แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก 2.4.1-แƒ˜แƒก แƒ–แƒ”แƒ›แƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ. แƒ›แƒแƒจแƒ˜แƒœ แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒ“แƒ”แƒ แƒ›แƒแƒ›แƒ”แƒฉแƒ•แƒ”แƒœแƒ: แƒ—แƒฃ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒ˜แƒก แƒแƒšแƒ‘แƒแƒ— แƒฃแƒคแƒ แƒ แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ 2.4 แƒ“แƒ แƒ›แƒ˜แƒ— แƒฃแƒ›แƒ”แƒขแƒ”แƒก, แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ master. แƒ“แƒ แƒ แƒแƒ“แƒ’แƒแƒœ แƒ•แƒ’แƒ”แƒ’แƒ›แƒแƒ•แƒ“แƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒแƒก, แƒกแƒฎแƒ•แƒ˜แƒกแƒ˜ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ. แƒแƒšแƒ‘แƒแƒ— แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ แƒแƒ แƒ˜แƒก แƒกแƒแƒฅแƒ›แƒ”: QEMU แƒแƒ  แƒ“แƒ’แƒแƒก แƒ“แƒ แƒ แƒแƒฆแƒแƒช แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒแƒชแƒฎแƒแƒ“แƒ”แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก 10 แƒžแƒ แƒแƒชแƒ”แƒœแƒขแƒ˜แƒ— แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒแƒช แƒ™แƒ˜.โ€žแƒฐแƒ, แƒแƒฎแƒšแƒ แƒ’แƒแƒงแƒ˜แƒœแƒ•แƒแƒก แƒ•แƒแƒžแƒ˜แƒ แƒ”แƒ‘โ€œ แƒ’แƒแƒ•แƒ˜แƒคแƒ˜แƒฅแƒ แƒ” แƒ“แƒ แƒ’แƒแƒ•แƒคแƒฃแƒญแƒ“แƒ˜. แƒแƒฅ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ“แƒ˜แƒ’แƒ แƒ”แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ: QEMU.js-แƒ˜แƒก แƒ”แƒ แƒ—แƒœแƒแƒ™แƒแƒ“แƒ˜แƒแƒœแƒ˜ แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒ แƒ“แƒ แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ QEMU แƒแƒ  แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒก แƒ›แƒ แƒแƒ•แƒแƒš แƒซแƒแƒคแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒแƒก (แƒแƒœแƒฃ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ“แƒแƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜แƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒฃแƒœแƒแƒ แƒก, แƒ“แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ "แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ” แƒงแƒ•แƒ”แƒšแƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜") แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ, แƒซแƒแƒคแƒ”แƒ‘แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ›แƒ”แƒขแƒแƒœแƒ, แƒ แƒแƒ› แƒจแƒ”แƒ›แƒ”แƒซแƒšแƒ แƒ’แƒแƒ แƒ”แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ. แƒแƒ›แƒแƒœ แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒ“แƒ แƒแƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒ˜แƒก แƒคแƒแƒฅแƒขแƒ˜, แƒ แƒแƒ› แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒ“แƒแƒœ master, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒœแƒแƒช แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ“แƒ˜ แƒฉแƒ”แƒ›แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒแƒก, แƒแƒกแƒ”แƒ•แƒ” แƒแƒšแƒฃแƒ‘แƒšแƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ แƒžแƒฃแƒœแƒฅแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒแƒจแƒ˜ (แƒ“แƒ, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒฉแƒ”แƒ›แƒก แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜) แƒแƒกแƒ”แƒ•แƒ”, แƒแƒšแƒ‘แƒแƒ—, แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒฃแƒšแƒแƒ‘แƒ.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”, แƒ แƒแƒ› แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ–แƒ แƒ˜ แƒแƒฅแƒ•แƒก แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜แƒก แƒ’แƒแƒ“แƒแƒ’แƒ“แƒ”แƒ‘แƒแƒก, แƒ›แƒ˜แƒกแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒจแƒšแƒแƒก แƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒแƒก แƒœแƒฃแƒšแƒ˜แƒ“แƒแƒœ, แƒ แƒแƒช แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒฃแƒคแƒ แƒ แƒแƒฎแƒแƒšแƒ–แƒ” แƒ“แƒ แƒแƒฎแƒšแƒ master.

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ›แƒ”แƒแƒ แƒ”: TLP แƒ›แƒ”แƒ—แƒแƒ“แƒแƒšแƒแƒ’แƒ˜แƒ

แƒแƒ แƒกแƒ”แƒ‘แƒ˜แƒ—แƒแƒ“, แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ, แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒฃแƒ’แƒ”แƒ‘แƒ แƒแƒ‘แƒ˜แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช โ€žแƒกแƒแƒ“ แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ”แƒ—?โ€œ แƒ“แƒ แƒ–แƒแƒ’แƒแƒ“แƒแƒ“ โ€žแƒ›แƒแƒ•แƒแƒฆแƒฌแƒ”แƒ•แƒ—? แƒแƒ› แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜ แƒ›แƒแƒฃแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ แƒ—แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ แƒ˜แƒงแƒ, แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜แƒ, แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒแƒ›แƒ˜แƒก แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒแƒ“ แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ. แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“ แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒ’แƒแƒ›แƒ”แƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒœแƒ แƒ”แƒก แƒ’แƒแƒœแƒ˜แƒ•แƒ แƒฃแƒšแƒแƒ“: แƒแƒขแƒแƒ›แƒฃแƒ แƒ˜ แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒชแƒœแƒแƒ‘แƒ˜แƒ”แƒ แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ (แƒ“แƒ แƒแƒ แƒ โ€žแƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ—แƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒ, แƒกแƒแƒœแƒแƒ› แƒแƒ  แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ (แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ—)โ€œ, แƒ แƒแƒ’แƒแƒ แƒช แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒšแƒ˜แƒœแƒฃแƒก แƒขแƒแƒ แƒ•แƒแƒšแƒ“แƒกแƒ›แƒ แƒ—แƒฅแƒ•แƒ แƒ•แƒ˜แƒœแƒ›แƒ”แƒ–แƒ”, แƒ•แƒ˜แƒ™แƒ˜แƒชแƒ˜แƒขแƒแƒขแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—) แƒ“แƒ แƒ.แƒจ.

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ›แƒ”แƒกแƒแƒ›แƒ”: แƒฌแƒงแƒแƒšแƒจแƒ˜ แƒฉแƒแƒกแƒ•แƒšแƒ แƒคแƒแƒ แƒ“แƒ˜แƒก แƒชแƒแƒ“แƒœแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”

แƒ›แƒ” แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ  แƒ›แƒแƒ›แƒ˜แƒจแƒแƒ แƒ”แƒ‘แƒ˜แƒ แƒ”แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฎแƒšแƒ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒแƒ  แƒ’แƒแƒ•แƒงแƒแƒšแƒแƒ“แƒ˜ แƒฃแƒ›แƒชแƒ˜แƒ แƒ”แƒกแƒ˜ แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒแƒ‘แƒ˜แƒก แƒ’แƒ–แƒแƒก แƒ“แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ แƒ”แƒก โ€žแƒ’แƒแƒ–แƒ แƒ“แƒ˜แƒšแƒ˜ แƒ’แƒ–แƒ˜แƒ—โ€œ, แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ แƒฉแƒ”แƒ›แƒ˜ TCG backend แƒœแƒฃแƒšแƒ˜แƒ“แƒแƒœ, แƒ แƒแƒ—แƒ แƒแƒ  แƒ แƒแƒ› แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒฃแƒœแƒ“แƒ แƒ—แƒฅแƒ•แƒ: "แƒ“แƒ˜แƒแƒฎ, แƒ”แƒก, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒœแƒ”แƒšแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒ•แƒ”แƒ  แƒ•แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก - แƒแƒกแƒ” แƒฌแƒ”แƒ แƒ˜แƒ TCI..." แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ”แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒจแƒ™แƒแƒ แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒแƒ“ แƒฉแƒแƒœแƒ“แƒ, แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ›แƒ” แƒ•แƒฅแƒ›แƒœแƒ˜ แƒแƒ แƒแƒ‘แƒ˜แƒ— แƒ™แƒแƒ“แƒก. แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ›แƒ‘แƒแƒ‘แƒ”แƒœ, โ€žแƒ’แƒ”แƒœแƒขแƒ˜ แƒจแƒ”แƒ˜แƒ™แƒ แƒ˜แƒ‘แƒัƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ แƒ˜แƒกโ€: แƒ™แƒแƒ“แƒ˜, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒกแƒ–แƒ” แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒก - แƒ˜แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒแƒก แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“แƒแƒช แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ JS แƒกแƒแƒ›แƒงแƒแƒ แƒแƒ“แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒกแƒแƒ“แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ แƒฉแƒ”แƒœแƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ  RISC แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“แƒแƒช แƒ›แƒ” แƒ›แƒ”แƒกแƒ›แƒ˜แƒก, แƒขแƒ˜แƒžแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒก แƒ›แƒ™แƒแƒคแƒ˜แƒแƒ“ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ แƒ”แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒ—แƒฃ แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ, แƒ›แƒแƒจแƒ˜แƒœ, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ˜แƒก แƒแƒฎแƒšแƒแƒกแƒแƒ. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒฉแƒ”แƒ›แƒ˜ แƒ‘แƒแƒšแƒ แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ•แƒ˜แƒ’แƒ”, แƒ แƒแƒ› แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒจแƒฃแƒแƒจแƒ˜, แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒแƒ  แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ‘แƒแƒ˜แƒขแƒ”แƒ™แƒแƒ“แƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒžแƒ แƒ”แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒแƒคแƒกแƒ”แƒขแƒฃแƒ แƒ˜แƒ“แƒแƒœ, แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒขแƒฃแƒ‘แƒ”แƒ แƒ™แƒฃแƒšแƒแƒ–แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ“แƒแƒœ. .

แƒ›แƒแƒ•แƒ˜แƒ“แƒœแƒ”แƒœ แƒ“แƒ แƒ“แƒแƒแƒ แƒขแƒงแƒ”แƒก

แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ˜แƒ•แƒšแƒ˜แƒกแƒจแƒ˜, แƒฏแƒแƒ“แƒแƒกแƒœแƒฃแƒ แƒ˜ แƒ“แƒแƒ แƒขแƒงแƒ›แƒ แƒจแƒ”แƒฃแƒ›แƒฉแƒœแƒ”แƒ•แƒšแƒแƒ“ แƒ’แƒแƒฉแƒœแƒ“แƒ: แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒฌแƒ”แƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜ GitHub-แƒ“แƒแƒœ แƒ›แƒแƒ“แƒ˜แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ Issues แƒ“แƒ Pull แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ, แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒแƒ“ แƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ แƒ—แƒ”แƒ›แƒแƒจแƒ˜ Binaryen แƒ แƒแƒ’แƒแƒ แƒช qemu backend แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜, โ€แƒ›แƒแƒœ แƒ แƒแƒฆแƒแƒช แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ, แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ แƒแƒ›แƒ” แƒ—แƒฅแƒ•แƒแƒกโ€. แƒฉแƒ•แƒ”แƒœ แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒ“แƒ˜แƒ— Emscripten-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ–แƒ” แƒ‘แƒ˜แƒœแƒแƒ แƒ˜แƒ”แƒœแƒ˜ WASM JIT-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“. แƒ˜แƒกแƒ”, แƒ›แƒ” แƒ•แƒ—แƒฅแƒ•แƒ˜, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— Apache 2.0 แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ แƒ˜แƒฅ แƒ“แƒ QEMU แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ GPLv2-แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ แƒ“แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒแƒœ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜. แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒแƒ“ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒแƒกแƒฌแƒแƒ แƒ”แƒ— แƒ แƒแƒ’แƒแƒ แƒ›แƒ” (แƒแƒ  แƒ•แƒ˜แƒชแƒ˜: แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒก, แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒแƒ แƒ›แƒแƒ’แƒ˜ แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ แƒ”แƒ‘แƒ, แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒ แƒ แƒแƒ›...). แƒแƒ›แƒแƒœ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ’แƒแƒ›แƒแƒฎแƒแƒ แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒ› แƒ“แƒ แƒแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒ™แƒ•แƒ˜แƒ แƒ“แƒ˜ แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒแƒ แƒ›แƒแƒขแƒ˜ WebAssembly แƒ“แƒ แƒ แƒแƒฆแƒแƒชแƒœแƒแƒ˜แƒ แƒแƒ“ แƒกแƒ”แƒ•แƒ“แƒ˜แƒแƒœแƒ˜ แƒ“แƒ แƒ’แƒแƒฃแƒ’แƒ”แƒ‘แƒแƒ แƒ˜ แƒ•แƒ˜แƒงแƒแƒ•แƒ˜. แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ—แƒแƒœแƒ—แƒฅแƒแƒ•แƒ“แƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒก แƒ’แƒแƒ แƒ“แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒ—, แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ“แƒ แƒ‘แƒแƒ˜แƒขแƒ”แƒ™แƒแƒ“แƒก แƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ“แƒ แƒ›แƒแƒก แƒ—แƒแƒ•แƒแƒ“ แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒแƒœแƒจแƒ˜.

แƒ›แƒ”แƒ แƒ” แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ˜แƒงแƒ แƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ QEMU แƒกแƒแƒคแƒแƒกแƒขแƒ แƒกแƒ˜แƒแƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒฃแƒคแƒ แƒ แƒ”แƒฎแƒ”แƒ‘แƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒก, "แƒ•แƒ˜แƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ”แƒก แƒ›แƒแƒ˜แƒœแƒช?" แฒ“แƒ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒแƒ“, แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒ. แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ›, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒแƒคแƒฃแƒญแƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ—แƒฃ แƒ˜แƒก แƒ›แƒ”แƒข-แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก:

  • แƒ แƒแƒ˜แƒ›แƒ” แƒกแƒแƒ’แƒแƒœแƒ›แƒแƒœแƒแƒ—แƒšแƒ”แƒ‘แƒšแƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒงแƒแƒ•แƒ”แƒšแƒ’แƒ•แƒแƒ แƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”
  • แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ iOS-แƒ–แƒ”, แƒกแƒแƒ“แƒแƒช, แƒญแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒแƒฎแƒ›แƒแƒ“, แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ, แƒแƒ แƒ˜แƒก JS แƒซแƒ แƒแƒ•แƒ (แƒ”แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ?)
  • แƒ›แƒ˜แƒœแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ“แƒ”แƒ›แƒแƒœแƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ - แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒคแƒšแƒแƒžแƒ˜, แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒฎแƒ˜แƒก firmware แƒ“แƒ แƒ.แƒจ.

แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก Runtime แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜

แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒ•แƒ—แƒฅแƒ•แƒ˜, QEMU แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ‘แƒ›แƒฃแƒšแƒ˜ แƒ›แƒฃแƒšแƒขแƒ˜แƒ แƒ”แƒ“แƒ˜แƒ แƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒก แƒ”แƒก แƒแƒ  แƒแƒฅแƒ•แƒก. แƒแƒœแƒฃ, แƒแƒ แƒ... แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ˜แƒก แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ WebWorkers - แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“แƒแƒช แƒ›แƒ” แƒ›แƒ”แƒกแƒ›แƒ˜แƒก, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒซแƒแƒšแƒ˜แƒแƒœแƒ˜ แƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ•แƒšแƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ” แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜แƒ, แƒ”แƒก แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒก แƒกแƒแƒ–แƒ˜แƒแƒ แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒกแƒแƒ–แƒแƒ’แƒแƒ“แƒแƒ”แƒ‘แƒ˜แƒก แƒ–แƒ”แƒฌแƒแƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒจ, แƒ”แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ—แƒแƒช แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ SharedArrayBuffers. แƒ—แƒแƒœแƒ“แƒแƒ—แƒแƒœแƒแƒ‘แƒ˜แƒ— แƒ“แƒแƒ˜แƒœแƒ”แƒ แƒ’แƒ, แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ”แƒ‘แƒจแƒ˜ แƒแƒฆแƒœแƒ˜แƒจแƒœแƒ”แƒก แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒฆแƒœแƒ˜แƒจแƒœแƒ”แƒก แƒแƒฎแƒแƒšแƒ˜ แƒฌแƒ”แƒšแƒ˜ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ Meltdown... แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒ›แƒ˜แƒ•แƒ˜แƒ“แƒœแƒ”แƒœ แƒ“แƒแƒกแƒ™แƒ•แƒœแƒแƒ›แƒ“แƒ”, แƒ แƒแƒ› แƒ“แƒ แƒแƒ˜แƒก แƒฃแƒฎแƒ”แƒจแƒ˜ แƒแƒœ แƒฃแƒฎแƒ”แƒจแƒ˜ แƒ’แƒแƒ–แƒแƒ›แƒ•แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒ”แƒ แƒ—แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ. แƒซแƒแƒคแƒ˜ แƒ›แƒแƒขแƒฃแƒšแƒแƒ‘แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก, แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ’แƒแƒ›แƒแƒ•แƒ. แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ แƒ—แƒ”แƒ— multithreading แƒกแƒแƒ”แƒ แƒ—แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—. แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ›แƒแƒ— แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒฉแƒแƒ แƒ—แƒ”แƒก แƒ˜แƒ’แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ˜แƒ แƒ™แƒ•แƒ, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ” แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ“แƒ แƒ—แƒฃ แƒแƒกแƒ”แƒ, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ”แƒชแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒแƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒซแƒแƒคแƒ˜แƒก แƒ“แƒแƒงแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒ›แƒ”แƒแƒ แƒ” แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒขแƒ”แƒ™แƒ˜แƒ— แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒžแƒฃแƒšแƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ: แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒ˜แƒฆแƒแƒ—, แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ— แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒฎแƒ•แƒ˜แƒ“แƒ”แƒ— แƒแƒฎแƒแƒšแƒ–แƒ” แƒแƒฎแƒแƒšแƒ˜ แƒกแƒขแƒ”แƒ™แƒ˜แƒ—. แƒ–แƒแƒ แƒ˜แƒก แƒ“แƒแƒกแƒขแƒแƒก แƒ›แƒแƒ แƒ—แƒแƒ•แƒก JS แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ. แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ แƒ แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒœแƒแƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒฎแƒ”แƒšแƒ˜แƒ—? แƒคแƒแƒฅแƒขแƒ˜แƒ, แƒ แƒแƒ› QEMU-แƒจแƒ˜ I/O แƒ‘แƒšแƒแƒ™แƒ˜ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒฅ แƒ’แƒแƒ›แƒแƒ“แƒ’แƒ”แƒ‘แƒ แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒกแƒขแƒ”แƒ™แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒžแƒฃแƒšแƒแƒชแƒ˜แƒ”แƒ‘แƒ˜. แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, Emscipten แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒก, แƒ—แƒฃแƒœแƒ“แƒแƒช แƒแƒ แƒก: แƒแƒกแƒ˜แƒœแƒชแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ ะธ แƒ˜แƒ›แƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš JavaScript แƒ™แƒแƒ“แƒจแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ’แƒแƒคแƒฃแƒญแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒแƒฆแƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜. แƒ›แƒ”แƒแƒ แƒ” แƒแƒ แƒ˜แƒก แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ "แƒกแƒฌแƒแƒ แƒ˜ แƒ’แƒ–แƒ" แƒ“แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ‘แƒแƒ˜แƒขแƒ”แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ แƒ˜ แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒœแƒ”แƒšแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒแƒคแƒฃแƒญแƒ”แƒ‘แƒก แƒ™แƒแƒ“แƒก. แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ, แƒแƒ› แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒงแƒแƒคแƒ˜แƒšแƒ˜แƒงแƒ (แƒฃแƒ™แƒ•แƒ” แƒ˜แƒงแƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ”แƒ‘แƒ˜ Asyncify-แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ˜แƒงแƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒ’แƒ˜แƒ•แƒ” API-แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ Emterpreter-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒแƒ— แƒ›แƒแƒ—แƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ).

แƒแƒ› แƒ“แƒ แƒแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒ” แƒฏแƒ”แƒ  แƒ•แƒ”แƒ  แƒ›แƒแƒ•แƒแƒฎแƒ”แƒ แƒฎแƒ” แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒงแƒแƒคแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ WASM-แƒจแƒ˜ แƒ“แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒžแƒ แƒ”แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Emterpreter-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒฏแƒ”แƒ  แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก (แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒกแƒ”แƒ แƒ˜แƒแƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ›แƒ‘แƒแƒ‘แƒ”แƒœ...). แƒแƒœแƒฃ, แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒกแƒแƒกแƒแƒชแƒ˜แƒšแƒ แƒคแƒ”แƒœแƒ˜แƒแƒœแƒ˜ แƒ แƒแƒ›:

  • แƒ˜แƒœแƒขแƒ”แƒ แƒžแƒ แƒ”แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜ I/O. แƒ˜แƒกแƒ”, แƒ›แƒแƒ แƒ—แƒšแƒ แƒ”แƒšแƒแƒ“แƒ˜แƒ— แƒ˜แƒ›แƒ˜แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš NVMe-แƒก แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ แƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—? ๐Ÿ™‚
  • แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒแƒ“ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ QEMU แƒ™แƒแƒ“แƒ˜ (แƒ›แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ”แƒšแƒ˜, แƒกแƒฎแƒ•แƒ แƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ.แƒจ.)
  • แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒแƒ“ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒกแƒขแƒฃแƒ›แƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ WASM-แƒจแƒ˜

QEMU แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜

แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ›แƒ˜แƒฎแƒ•แƒ“แƒ˜แƒ—, แƒกแƒขแƒฃแƒ›แƒ แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ”แƒ›แƒฃแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒ“แƒ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ QEMU-แƒจแƒ˜. แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ”แƒก แƒชแƒแƒขแƒ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜แƒ:

  • แƒแƒ แƒ˜แƒก แƒกแƒขแƒฃแƒ›แƒแƒ แƒ˜ แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜
  • แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒ›แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜, แƒ™แƒ”แƒ แƒซแƒแƒ“, KVM แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Linux-แƒ–แƒ” (แƒกแƒขแƒฃแƒ›แƒแƒ แƒ˜ แƒ“แƒ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜), TCG JIT แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก. QEMU 2.9-แƒ“แƒแƒœ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ HAXM แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ Windows-แƒ–แƒ” (แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜)
  • แƒ—แƒฃ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ TCG แƒ“แƒ แƒแƒ แƒ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒแƒก แƒแƒฅแƒ•แƒก แƒชแƒแƒšแƒ™แƒ”แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒฐแƒแƒกแƒขแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒœแƒ˜แƒ•แƒ”แƒ แƒกแƒแƒšแƒฃแƒ แƒ˜ แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
  • ... แƒ“แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒ แƒจแƒ”แƒ›แƒ - แƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ”แƒ แƒ˜แƒคแƒ”แƒ แƒ˜แƒฃแƒšแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜, แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ, แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜-แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒ.แƒจ.

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒ˜แƒชแƒแƒ“แƒ˜แƒ—: QEMU-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ‘แƒแƒซแƒ•แƒ แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, AFL fuzzer แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ•แƒ˜แƒœแƒ›แƒ”แƒก แƒกแƒฃแƒ แƒก QEMU-แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒ› แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก JS-แƒ–แƒ” แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ? ๐Ÿ˜‰

แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒ แƒซแƒ”แƒšแƒ•แƒแƒ“แƒ˜แƒแƒœแƒ˜ แƒฃแƒคแƒแƒกแƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ, QEMU แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ–แƒแƒ แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— configure ะธ make. แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒ แƒแƒฆแƒแƒช: TCG backend, thread แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ, แƒ แƒแƒฆแƒแƒช แƒกแƒฎแƒ•แƒ. แƒœแƒฃ แƒฉแƒฅแƒแƒ แƒแƒ‘แƒ— แƒ˜แƒงแƒแƒ— แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ˜/แƒจแƒ”แƒจแƒ˜แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ (แƒฎแƒแƒ–แƒ˜ แƒ’แƒแƒฃแƒกแƒ•แƒ˜แƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒก) Autoconf-แƒ—แƒแƒœ แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ”แƒ แƒกแƒžแƒ”แƒฅแƒขแƒ˜แƒ•แƒแƒจแƒ˜ - แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, configure QEMU-แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ—แƒ•แƒ˜แƒ—แƒœแƒแƒ™แƒ”แƒ—แƒ˜แƒ แƒ“แƒ แƒแƒ แƒแƒคแƒ แƒ˜แƒกแƒ’แƒแƒœ แƒแƒ  แƒแƒ แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒฅแƒ›แƒœแƒ˜แƒšแƒ˜.

WebAssembly

แƒ แƒ แƒฐแƒฅแƒ•แƒ˜แƒ แƒแƒ› แƒœแƒ˜แƒ•แƒ—แƒก WebAssembly (แƒแƒ™แƒ WASM)? แƒ”แƒก แƒแƒ แƒ˜แƒก Asm.js-แƒ˜แƒก แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฆแƒแƒ  แƒแƒ แƒ˜แƒก แƒžแƒ แƒ”แƒขแƒ”แƒœแƒ–แƒ˜แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ˜ JavaScript แƒ™แƒแƒ“แƒ˜. แƒžแƒ˜แƒ แƒ˜แƒฅแƒ˜แƒ—, แƒ˜แƒก แƒแƒ แƒ˜แƒก แƒฌแƒ›แƒ˜แƒœแƒ“แƒ แƒ‘แƒ˜แƒœแƒแƒ แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒ›แƒแƒกแƒจแƒ˜ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒก แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฉแƒแƒฌแƒ”แƒ แƒแƒช แƒ™แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜: แƒ™แƒแƒ›แƒžแƒแƒฅแƒขแƒฃแƒ แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒก แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜. LEB128.

แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒ’แƒกแƒ›แƒ”แƒœแƒ˜แƒแƒ— แƒ’แƒแƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ Asm.js-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒ”แƒก แƒแƒ แƒ˜แƒก โ€žแƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒกโ€œ แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ (แƒแƒœแƒฃ, if-then-else, loops แƒ“แƒ แƒ.แƒจ.), แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ JS แƒซแƒ แƒแƒ•แƒ”แƒ‘แƒ˜. แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก LLVM IR, แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒก แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ˜แƒก แƒ™แƒแƒ“แƒ—แƒแƒœ. แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜แƒ, QEMU-แƒ˜แƒก แƒจแƒฃแƒแƒšแƒ”แƒ“แƒฃแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ›แƒแƒ“แƒ’แƒ”แƒœแƒšแƒแƒ‘แƒ แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒก แƒแƒ แƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ”แƒกแƒ—แƒแƒœ. แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒแƒฅ แƒแƒ แƒ˜แƒก, แƒ‘แƒแƒ˜แƒขแƒ˜แƒ™แƒแƒ“แƒ˜, แƒขแƒแƒœแƒฏแƒ•แƒ˜แƒก แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒ˜... แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ แƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜, แƒ—แƒฃ-แƒ›แƒแƒจแƒ˜แƒœ-แƒกแƒฎแƒ•แƒ แƒ“แƒ แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ”แƒ‘แƒ˜!..

แƒ“แƒ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜, แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒช Binaryen แƒแƒ แƒ˜แƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ: แƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ›แƒ˜แƒ˜แƒฆแƒแƒก แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ แƒแƒฎแƒšแƒแƒก, แƒ แƒแƒช แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ WASM-แƒจแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒก แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก แƒ™แƒแƒ“แƒ˜ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒ˜แƒกแƒ”, แƒ›แƒ” แƒฃแƒ™แƒ•แƒ” แƒ•แƒ—แƒฅแƒ•แƒ˜, แƒ แƒแƒ› แƒ˜แƒก แƒ›แƒแƒšแƒแƒ•แƒก WebAssembly แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ C/C++ API-แƒก แƒ›แƒ˜แƒฆแƒ›แƒ.

TCG (แƒžแƒแƒขแƒแƒ แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒแƒขแƒแƒ แƒ˜)

GCT แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ˜แƒงแƒ backend C แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ›แƒแƒœ แƒ•แƒ”แƒ  แƒ’แƒแƒฃแƒซแƒšแƒ แƒ™แƒแƒœแƒ™แƒฃแƒ แƒ”แƒœแƒชแƒ˜แƒแƒก GCC-แƒ—แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒ˜แƒžแƒแƒ•แƒ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ QEMU-แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜ แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒ˜แƒก TCG backend, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒก แƒแƒ‘แƒกแƒขแƒ แƒแƒฅแƒขแƒฃแƒš แƒ‘แƒแƒ˜แƒขแƒ”แƒ™แƒแƒ“แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒแƒœแƒ˜ แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ•แƒแƒ แƒ˜แƒ“แƒ”. แƒ—แƒฃแƒ›แƒชแƒ, แƒ˜แƒก แƒคแƒแƒฅแƒขแƒ˜, แƒ แƒแƒ› QEMU-แƒจแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒขแƒฃแƒ‘แƒ”แƒ แƒ™แƒฃแƒšแƒแƒ–แƒ–แƒ” แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ˜แƒก แƒฉแƒแƒ แƒ—แƒ•แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—. tcg_qemu_tb_exec, แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก.

QEMU-แƒจแƒ˜ แƒแƒฎแƒแƒšแƒ˜ TCG backend-แƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒฅแƒ•แƒ”แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ tcg/<ะธะผั ะฐั€ั…ะธั‚ะตะบั‚ัƒั€ั‹> (แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, tcg/binaryen), แƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒ  แƒคแƒแƒ˜แƒšแƒก: tcg-target.h ะธ tcg-target.inc.c ะธ แƒ“แƒแƒœแƒ˜แƒจแƒœแƒแƒก แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ configure. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒฎแƒ•แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ แƒ˜แƒฅ, แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ› แƒแƒ แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ›แƒ˜แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ แƒ˜แƒ•แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒกแƒแƒ“แƒ›แƒ”: แƒ”แƒ แƒ—แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ (แƒ˜แƒก แƒจแƒ”แƒ“แƒ˜แƒก tcg/tcg.hแƒ“แƒ แƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ tcg, accel แƒ“แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“), แƒ›แƒ”แƒแƒ แƒ” - แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒ“แƒ˜แƒก แƒœแƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ tcg/tcg.c, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒก แƒแƒฅแƒ•แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒ›แƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ–แƒ”.

แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”, แƒ แƒแƒ› แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ˜แƒ“ แƒ“แƒ แƒแƒก แƒ“แƒแƒ•แƒฎแƒแƒ แƒฏแƒแƒ•แƒ“แƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ  แƒ’แƒแƒ›แƒแƒ™แƒ•แƒšแƒ”แƒ•แƒ”แƒ‘แƒ–แƒ” แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ˜แƒ’แƒ˜, แƒ›แƒ” แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒ•แƒแƒ™แƒแƒžแƒ˜แƒ แƒ” แƒแƒ› แƒแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก โ€žแƒฉแƒแƒœแƒฉแƒฎแƒ”แƒ‘แƒ˜โ€œ แƒกแƒฎแƒ•แƒ backend-แƒ˜แƒก แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ, แƒ’แƒฃแƒšแƒฌแƒ แƒคแƒ”แƒšแƒแƒ“ แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒ” แƒ”แƒก แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒจแƒ˜.

แƒคแƒแƒ˜แƒšแƒ˜ tcg-target.h แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒคแƒแƒ แƒ›แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒก #define-s:

  • แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜ แƒ“แƒ แƒ แƒ แƒกแƒ˜แƒ’แƒแƒœแƒ”แƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ–แƒ” (แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒช แƒ’แƒ•แƒ˜แƒœแƒ“แƒ, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒช แƒ’แƒ•แƒกแƒฃแƒ แƒก - แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒฃแƒคแƒ แƒ แƒ˜แƒ›แƒแƒ–แƒ”แƒ, แƒ—แƒฃ แƒ แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ  แƒ™แƒแƒ“แƒจแƒ˜ "แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ”" แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ–แƒ” ...)
  • แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ: x86-แƒ–แƒ” แƒ“แƒ แƒ—แƒฃแƒœแƒ“แƒแƒช TCI-แƒจแƒ˜, แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒ•แƒแƒžแƒ˜แƒ แƒ”แƒ‘ แƒ™แƒแƒ“แƒ˜แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜ แƒฉแƒแƒกแƒ•แƒแƒก แƒแƒ แƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ”แƒ‘แƒ˜ Binaryen แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ–แƒ”, แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒ” แƒ•แƒ˜แƒขแƒงแƒ•แƒ˜: 4 แƒ‘แƒแƒ˜แƒขแƒ”แƒ‘แƒ˜
  • แƒ แƒ แƒแƒ แƒแƒกแƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ backend-แƒก - แƒฉแƒ•แƒ”แƒœ แƒฉแƒแƒ แƒ—แƒแƒ•แƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก, แƒ แƒแƒกแƒแƒช แƒ•แƒ˜แƒžแƒแƒ•แƒ˜แƒ— Binaryen-แƒจแƒ˜, แƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ”แƒชแƒ˜แƒ— แƒแƒ›แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒฃแƒคแƒ แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒแƒ“ แƒ“แƒแƒงแƒแƒก.
  • แƒ แƒ แƒแƒ แƒ˜แƒก TLB แƒฅแƒ”แƒจแƒ˜แƒก แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒ แƒ–แƒแƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒšแƒ˜แƒ backend-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . แƒคแƒแƒฅแƒขแƒ˜แƒ, แƒ แƒแƒ› QEMU-แƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒ˜แƒ: แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒฎแƒ›แƒแƒ แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒœ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒก/แƒจแƒ”แƒœแƒแƒฎแƒ•แƒแƒก แƒกแƒขแƒฃแƒ›แƒ แƒ˜แƒก MMU-แƒก แƒ’แƒแƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ˜แƒ— (แƒกแƒแƒ“ แƒ•แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ˜แƒ— แƒแƒฎแƒšแƒ แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”?), แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ”แƒœ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ— แƒ—แƒแƒ แƒ’แƒ›แƒแƒœ แƒฅแƒ”แƒจแƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒกแƒแƒ›แƒแƒฃแƒฌแƒงแƒ”แƒ‘แƒšแƒ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒจแƒ˜ แƒฉแƒแƒกแƒแƒ แƒ—แƒแƒ•แƒแƒ“. แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒ˜แƒ, แƒ แƒ แƒแƒคแƒกแƒ”แƒขแƒ˜ แƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒแƒ› แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ“ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒชแƒ˜แƒ แƒ” แƒ“แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ—?
  • แƒแƒฅ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ”แƒ แƒ—แƒ˜ แƒแƒœ แƒแƒ แƒ˜ แƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒก แƒ“แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ”แƒ‘แƒ, แƒฉแƒแƒ แƒ—แƒแƒ— แƒขแƒฃแƒ‘แƒ”แƒ แƒ™แƒฃแƒšแƒแƒ–แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒกแƒฃแƒ แƒ•แƒ˜แƒšแƒ˜แƒกแƒแƒ›แƒ”แƒ‘แƒ  แƒแƒฆแƒฌแƒ”แƒ แƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒชแƒ˜แƒ แƒ” inline- แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ flush_icache_range (แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ)

แƒคแƒแƒ˜แƒšแƒ˜ tcg-target.inc.cแƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒ–แƒแƒ›แƒ˜แƒ— แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ˜แƒ“แƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก:

  • แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ, แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒš แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ–แƒ” แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ“แƒ”แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜. แƒฃแƒฎแƒ”แƒจแƒแƒ“ แƒ“แƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒฉแƒ”แƒ› แƒ›แƒ˜แƒ”แƒ  แƒกแƒฎแƒ•แƒ แƒ‘แƒ”แƒฅแƒ”แƒœแƒ“แƒ˜แƒ“แƒแƒœ
  • แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ”แƒ แƒ— แƒจแƒ˜แƒ“แƒ แƒ‘แƒแƒ˜แƒขแƒ˜แƒ™แƒแƒ“แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒแƒก
  • แƒแƒฅ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒ“แƒแƒ›แƒฎแƒ›แƒแƒ แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ tcg/tcg.c

แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒแƒ•แƒ˜แƒ แƒฉแƒ˜แƒ” แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒ: แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒแƒ—แƒฎแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜: แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒœแƒ˜แƒจแƒแƒœแƒ˜ (แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒกแƒ˜แƒแƒฎแƒšแƒแƒ•แƒ”แƒก 0xFFFFFFFF, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ แƒขแƒฃแƒ‘แƒ”แƒ แƒ™แƒฃแƒšแƒแƒ–แƒ˜แƒก แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ), แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒ˜, แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒ“แƒ แƒฏแƒแƒ“แƒแƒกแƒœแƒฃแƒ แƒ˜ แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒœแƒ˜แƒจแƒแƒœแƒ˜ แƒ›แƒแƒ—แƒแƒ•แƒกแƒ“แƒ 0xFFFFFFFF - nแƒกแƒแƒ“ n - แƒ›แƒชแƒ˜แƒ แƒ” แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜ แƒ“แƒ แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ”, แƒ แƒแƒชแƒ แƒ˜แƒ’แƒ˜ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ“แƒ แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒœแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒ˜แƒก แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ 1-แƒ˜แƒ—. แƒ แƒแƒชแƒ แƒ›แƒ˜แƒแƒฆแƒฌแƒ˜แƒ 0xFFFFFFFE, แƒจแƒ”แƒ“แƒ’แƒ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ, แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜, แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒžแƒแƒขแƒแƒ แƒ โ€žแƒ’แƒแƒ›แƒจแƒ•แƒ”แƒ‘แƒจแƒ˜โ€œ, แƒกแƒแƒ˜แƒ“แƒแƒœแƒแƒช แƒ›แƒแƒฎแƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ. tcg_qemu_tb_execแƒ“แƒ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒ›แƒแƒ˜แƒฆแƒ”แƒก QEMU แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ.

แƒ™แƒšแƒแƒกแƒ˜แƒ™แƒแƒกแƒ”แƒ‘แƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒคแƒ แƒแƒ–แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, "แƒ™แƒ แƒ˜แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒก แƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒแƒ› แƒฎแƒ›แƒแƒจแƒ˜ แƒžแƒ แƒแƒ’แƒ”แƒ แƒ˜แƒก แƒ’แƒฃแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก...". แƒ—แƒฃแƒ›แƒชแƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒกแƒแƒ“แƒฆแƒแƒช แƒŸแƒแƒœแƒแƒ•แƒ“แƒ. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒก แƒ›แƒแƒ แƒ—แƒแƒ•แƒ“แƒ QEMU! แƒ›แƒ” แƒ›แƒฅแƒแƒœแƒ“แƒ แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก (แƒ™แƒแƒ แƒ’แƒแƒ“, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜), แƒฌแƒแƒ•แƒจแƒแƒšแƒ” แƒ˜แƒก, แƒ•แƒ˜แƒกแƒ˜ แƒ‘แƒ›แƒฃแƒšแƒ˜แƒช แƒแƒ“แƒ แƒ” แƒ˜แƒงแƒ แƒแƒ› แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒแƒœ แƒแƒ  แƒฃแƒจแƒ•แƒ”แƒšแƒ. แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, QEMU แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ“แƒ แƒ˜แƒฅ แƒฌแƒ”แƒ แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ™แƒแƒ“แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜ แƒแƒ›แƒแƒ˜แƒฌแƒฃแƒ แƒ”แƒ‘แƒ, แƒ™แƒแƒ“แƒ˜ แƒ˜แƒจแƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜แƒก แƒฉแƒแƒฌแƒ”แƒ แƒ.

แƒ™แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ˜แƒ•แƒฎแƒ•แƒ“แƒ˜, แƒ แƒแƒ› แƒฏแƒแƒ“แƒแƒกแƒœแƒฃแƒ แƒ˜ แƒœแƒแƒ›แƒ แƒ˜แƒก แƒฎแƒ แƒ˜แƒ™แƒ›แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒชแƒ, แƒแƒ  แƒ“แƒแƒ•แƒ›แƒแƒ แƒชแƒฎแƒ“แƒ” แƒ’แƒ แƒแƒ•แƒ˜แƒก แƒ’แƒแƒœแƒแƒ“แƒ’แƒฃแƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒ•แƒ” แƒฃแƒฆแƒ”แƒšแƒขแƒ”แƒฎแƒ˜แƒšแƒ–แƒ” แƒแƒ แƒแƒ˜แƒœแƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒ‘แƒฃแƒคแƒ”แƒ แƒ–แƒ” แƒ แƒแƒ˜แƒ›แƒ” แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ•แƒ˜แƒœ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒฌแƒ”แƒ แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒก, แƒ แƒแƒ› แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒแƒ•แƒšแƒ˜แƒ— แƒฉแƒ”แƒ›แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ? แƒ แƒแƒ’แƒแƒ แƒช Emscripten-แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ’แƒ•แƒ˜แƒ แƒฉแƒ”แƒ•แƒ”แƒœ, แƒ แƒแƒชแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒจแƒ”แƒ›แƒ”แƒฅแƒ›แƒœแƒ, แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒขแƒแƒœแƒ” แƒฃแƒ™แƒแƒœ แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒฃแƒ  แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜, แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” แƒ›แƒแƒกแƒ–แƒ” Mozilla Record-Replay... แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒ›แƒ˜แƒ•แƒฎแƒ•แƒ“แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ• แƒ แƒแƒ›แƒ”แƒก: แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ struct TranslationBlock แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒ˜แƒชแƒแƒœแƒ˜แƒ— แƒกแƒแƒ“... แƒแƒกแƒ”แƒ, แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒฌแƒ˜แƒœ. แƒแƒ›แƒ˜แƒก แƒ’แƒแƒชแƒœแƒแƒ‘แƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒงแƒแƒ•แƒแƒ แƒฏแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ (แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ”) แƒ“แƒแƒ›แƒ”แƒขแƒแƒ•แƒ”แƒ‘แƒ˜แƒœแƒ แƒ“แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ•แƒงแƒแƒ แƒ” แƒฏแƒแƒ“แƒแƒกแƒœแƒฃแƒ แƒ˜ แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ“แƒ แƒ“แƒแƒ แƒฉแƒ”แƒœแƒ˜แƒšแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒ”แƒชแƒ˜. struct TranslationBlock, แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒชแƒแƒšแƒ›แƒฎแƒ แƒ˜แƒ•แƒแƒ“ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ’แƒแƒ˜แƒแƒ แƒแƒก แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒฅแƒ”แƒจแƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒแƒก แƒ“แƒ แƒ’แƒแƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒแƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ.

แƒ แƒฉแƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฎแƒ”แƒšแƒฏแƒแƒฎแƒ”แƒ‘แƒ˜: แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜ - แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ BinaryenExpressionRef, แƒแƒœแƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒงแƒฃแƒ แƒ”แƒ‘แƒ”แƒœ แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฌแƒ แƒคแƒ˜แƒ•แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒ‘แƒšแƒแƒ™แƒจแƒ˜, แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒแƒ แƒ˜แƒก BB-แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ˜แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ, แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒแƒ“ แƒฌแƒแƒ•แƒ˜แƒ“แƒ”แƒ—. แƒ˜แƒกแƒ”, แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ Relooper-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—. แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒœแƒกแƒแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ•แƒแƒ แƒแƒฃแƒ“แƒ˜, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒแƒ—แƒฎแƒ˜ แƒ‘แƒแƒ˜แƒขแƒ˜แƒ—, แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒแƒ แƒ˜ แƒ‘แƒ˜แƒขแƒ˜ แƒ”แƒขแƒ˜แƒ™แƒ”แƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒ›แƒแƒ˜แƒฆแƒแƒ— แƒ˜แƒ’แƒ˜. แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒแƒกแƒ”แƒ—แƒ˜ แƒ”แƒขแƒ˜แƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ QEMU-แƒจแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ TCG แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒกแƒ•แƒšแƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

Binaryen-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

WebAssembly-แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒฎแƒ”แƒฃแƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒฃแƒšแƒ”แƒ‘แƒ. แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ˜ แƒ“แƒ แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒ แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ, แƒกแƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ แƒœแƒแƒ™แƒแƒ“แƒ˜ แƒ“แƒ แƒ.แƒจ. แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒ•แƒ—แƒฅแƒ•แƒ˜, แƒแƒฅ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒœแƒแƒ™แƒแƒ“แƒ˜ แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ’แƒแƒœแƒจแƒขแƒแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ”แƒ‘แƒ˜, แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ.แƒจ. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒกแƒขแƒ”แƒ™แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒจแƒ™แƒแƒ แƒแƒ“, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช JS-แƒจแƒ˜. แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒแƒ  แƒ’แƒแƒ›แƒแƒ›แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒแƒ— แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒแƒ  แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ—.

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒแƒกแƒ”แƒ•แƒ” แƒแƒฅแƒ•แƒ— แƒšแƒแƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜, แƒ“แƒแƒœแƒแƒ›แƒ แƒ˜แƒšแƒ˜ แƒœแƒฃแƒšแƒ˜แƒ“แƒแƒœ, แƒขแƒ˜แƒžแƒ˜แƒก: int32 / int64 / float / double. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ n แƒšแƒแƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒแƒ แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒ–แƒ” แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜. แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒแƒ—, แƒ แƒแƒ› แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒแƒฅ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ—แƒšแƒแƒ“ แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ˜แƒœแƒช แƒแƒ  แƒแƒขแƒแƒ แƒ”แƒ‘แƒ”แƒœ แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒก โ€žแƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜/แƒฎแƒ”แƒšแƒ›แƒแƒฃแƒฌแƒ”แƒ แƒ”แƒšแƒ˜โ€œ: แƒ แƒแƒ’แƒแƒ  แƒ˜แƒฅแƒชแƒ”แƒ•แƒ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ–แƒ”.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“ แƒ แƒแƒ› แƒ•แƒ—แƒฅแƒ•แƒแƒ—, Binaryen แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ C-API: แƒ—แƒฅแƒ•แƒ”แƒœ แƒฅแƒ›แƒœแƒ˜แƒ— แƒ›แƒแƒ“แƒฃแƒšแƒก, แƒ›แƒแƒกแƒจแƒ˜ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜ - แƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ˜, แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜, แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ แƒกแƒฎแƒ•แƒ แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜ แƒœแƒแƒ™แƒแƒ“แƒ˜ แƒ“แƒ แƒ.แƒจ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฅแƒ›แƒœแƒ˜แƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ˜แƒกแƒ˜ แƒกแƒฎแƒ”แƒฃแƒšแƒ˜. แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ”, แƒ’แƒแƒฅแƒ•แƒ— แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜, แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ relooper แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜. แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“แƒแƒช แƒ›แƒ” แƒ›แƒ”แƒกแƒ›แƒ˜แƒก, แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ‘แƒšแƒแƒ™แƒจแƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ˜แƒก แƒแƒ  แƒกแƒชแƒ˜แƒšแƒ“แƒ”แƒ‘แƒ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒก - แƒแƒœแƒฃ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ˜แƒ“แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ / แƒœแƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒœแƒจแƒขแƒแƒ”แƒ‘แƒ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ 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);

... แƒ—แƒฃ แƒ แƒแƒ›แƒ” แƒ“แƒแƒ›แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ, แƒ‘แƒแƒ“แƒ˜แƒจแƒ˜, แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒกแƒแƒฉแƒ”แƒœแƒแƒ“แƒแƒ แƒ“แƒ แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜แƒ.

แƒ“แƒ แƒแƒฎแƒšแƒ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ crack-fex-pex, แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒกแƒ”แƒ—แƒ˜:

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-แƒจแƒ˜. Chrome-แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ•แƒœแƒ”แƒœ แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ–แƒแƒ“ แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒ–แƒ”, แƒ แƒแƒ› แƒ•แƒ˜แƒœแƒ›แƒ”แƒก แƒกแƒฃแƒ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก WebAssembly แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒแƒ—แƒแƒกแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ”แƒ’แƒ–แƒ”แƒ›แƒžแƒšแƒแƒ แƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒ•แƒ”แƒก แƒ’แƒ˜แƒ’แƒแƒ‘แƒแƒ˜แƒขแƒ˜ แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก...

แƒฏแƒ”แƒ  แƒกแƒฃแƒš แƒ”แƒกแƒแƒ. แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒกแƒฎแƒ•แƒ แƒกแƒขแƒแƒขแƒ˜แƒ แƒ˜แƒงแƒแƒก แƒ—แƒฃ แƒ•แƒ˜แƒœแƒ›แƒ” แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ“แƒ”แƒ‘แƒ. แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒแƒ˜แƒœแƒช แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ. แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒแƒ–แƒ แƒ˜แƒช แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก, แƒ แƒแƒ› WebAssembly แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ แƒ˜แƒงแƒแƒก แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ”แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒฎแƒ“แƒ”แƒ‘แƒ 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));
}

...แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ แƒ•แƒแƒšแƒ’แƒ แƒ˜แƒœแƒ“แƒ—แƒแƒœ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ›, แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, แƒ—แƒแƒ•แƒแƒ“ แƒ•แƒแƒšแƒ’แƒ แƒ˜แƒœแƒ“แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ“ แƒฃแƒ‘แƒ˜แƒซแƒ’แƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒแƒก แƒ˜แƒฅแƒ˜แƒ“แƒแƒœ :)

แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ•แƒ˜แƒœแƒ›แƒ”แƒ› แƒฃแƒ™แƒ”แƒ— แƒแƒฎแƒกแƒœแƒแƒก แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฉแƒ”แƒ›แƒ˜ แƒ”แƒก แƒ™แƒแƒ“แƒ˜...

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ