QEMU.jsαŸ– αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαž αžΎαž™αž‡αžΆαž˜αž½αž™ WASM

αž˜αžΆαž“αž–αŸαž›αž˜αž½αž™αžαŸ’αž‰αž»αŸ†αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž›αŸαž„αžŸαžΎαž… αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž—αžΆαž–αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸαž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αžšαŸ€αž“αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž JavaScript (αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹ Asm.js) αž–αžΈαž€αžΌαžŠαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” QEMU αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸ αž αžΎαž™αž”αž“αŸ’αžαž·αž…αž€αŸ’αžšαŸ„αž™αž˜αž€ αž’αžαŸ’αžαž”αž‘αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž›αžΎ Habr αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž’αŸ’αžœαžΎαž‚αž˜αŸ’αžšαŸ„αž„αž‘αžΎαž„αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„ WebAssembly αž αžΎαž™αžαŸ‚αž˜αž‘αžΆαŸ†αž„αžˆαž”αŸ‹αžαŸ’αž›αž½αž“αž―αž„αž‘αŸ€αžαž•αž„αŸ” αž‡αž·αžαžšαž½αž…αžšαžΆαž›αŸ‹αž αžΎαž™αŸ” αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž…αž„αŸ‹αž”αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αž‘αŸ... αž€αžΆαžšαž„αžΆαžšαž€αŸ†αž–αž»αž„αž”αž“αŸ’αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΊαžαžŽαžΆαžŸαŸ‹ αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸ„αŸ‡αž”αžΆαž“αž›αŸαž… αž’αžαŸ’αžαžΆαž’αž·αž”αŸ’αž”αžΆαž™ αž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘ "αžαžΎαžœαžΆαž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ?" αž‡αžΆαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž…αž˜αŸ’αž›αžΎαž™αž›αž˜αŸ’αž’αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž›αžΊαžαžΆ "αž“αŸαŸ‡αžŸαŸ’αžαžΆαž”αŸ‹αž‘αŸ…αžŠαžΌαž…αž‡αžΆαž’αžαŸ’αžαž”αž‘αž˜αž½αž™"αŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“, αž“αžΉαž„αž˜αžΆαž“αž’αžαŸ’αžαž”αž‘αž˜αž½αž™αŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž™αž›αŸ‹αžαžΆαžœαžΆαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαŸ” αž–αžΈαžœαžΆ αž’αŸ’αž“αž€αž’αžΆαž“αž“αžΉαž„αžšαŸ€αž“αž€αžΆαžšαž–αž·αžαž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αž–αžΈαž€αžΆαžšαžšαž…αž“αžΆαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠ QEMU αž€αŸαžŠαžΌαž…αž‡αžΆαžšαž”αŸ€αž”αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž„αž€αŸ’αžšαž„ Just-in-Time αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžšαŸ”

αž—αžΆαžšαž€αž·αž…αŸ’αž…

αžŠαŸ„αž™αžŸαžΆαžšαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαŸ€αž“αž–αžΈαžšαž”αŸ€αž” "αžŠαžΌαž…αž˜αŸ’αžŠαŸαž…" αž…αŸ’αžšαž€ QEMU αž‘αŸ… JavaScript αž“αŸ…αž–αŸαž›αž“αŸαŸ‡ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΆαž‡αŸ’αž‰αžΆ αž“αž·αž„αž˜αž·αž“αž’αŸ’αžœαžΎαž€αŸ†αž αž»αžŸαž…αžΆαžŸαŸ‹αž˜αŸ’αžαž„αž‘αŸ€αžαŸ”

αž€αŸ†αž αž»αžŸαž›αŸαžαž˜αž½αž™αŸ– αžŸαžΆαžαžΆαž–αžΈαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž…αŸ†αžŽαž»αž…

αž€αŸ†αž αž»αžŸαžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‚αžΊαž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž…αŸαž‰αž–αžΈαž€αŸ†αžŽαŸ‚ 2.4.1 αžαžΆαž„αž›αžΎαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αž‰αž»αŸ†αž‡αžΆαž‚αŸ†αž“αž·αžαžŠαŸαž›αŸ’αž’αž˜αž½αž™αŸ– αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž…αŸ†αžŽαž»αž…αž˜αžΆαž“ αž“αŸ„αŸ‡αžœαžΆαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αžΆαž“αžŸαŸ’αžαŸαžšαž—αžΆαž–αž‡αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰ 2.4 αž αžΎαž™αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΆαžαžΆ master. αž αžΎαž™αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžαŸ’αž‰αž»αŸ†αž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ†αž“αž½αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαž€αŸ†αž αž»αžŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžšαžΏαž„αŸ– QEMU αž˜αž·αž“αž“αŸ…αžŸαŸ’αž„αŸ€αž˜αž‘αŸ αž αžΎαž™αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡αž–αž½αž€αž‚αŸαžαŸ‚αž˜αž‘αžΆαŸ†αž„αž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαž–αžΈαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΌαžŠαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž 10 αž—αžΆαž‚αžšαž™αŸ” "αž˜αŸ‚αž“αž αžΎαž™ αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž€αž€" αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‚αž·αžαž αžΎαž™αžαžΌαž…αž…αž·αžαŸ’αžαŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαž”αž€αžŸαŸ’αžšαžΆαž™αŸ– αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž’αž˜αŸ’αž˜αž‡αžΆαžαž·αž“αŸƒαžαŸ’αžŸαŸ‚αžαŸ‚αž˜αž½αž™αž“αŸƒ QEMU.js αž“αž·αž„αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆ QEMU αžŠαžΎαž˜αž˜αž·αž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αžΈαž’αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαžαŸ’αžŸαŸ‚αž–αž αž»αžαŸ’αžŸαŸ‚αž‘αŸ (αž“αŸ„αŸ‡αž‚αžΊαžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž•αŸ’αž›αžΌαžœαž€αžΌαžŠαžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž€αŸ‹αž‘αž„αž‚αŸ’αž“αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“ αž“αž·αž„ αž˜αž·αž“αž˜αŸ‚αž“αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚ "αž”αŸ’αžšαžΎαžαžΊαžŽαŸ‚αž›αž‘αžΆαŸ†αž„αž’αžŸαŸ‹") αž‚αžΊαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆ αž˜αž»αžαž„αžΆαžšαž…αž˜αŸ’αž”αž„αž“αŸƒαžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœ "αž”αžΎαž€αžœαžΆαž…αŸαž‰" αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž αŸ…αž–αžΈαžαžΆαž„αž€αŸ’αžšαŸ…αž”αžΆαž“αŸ” αž“αŸαŸ‡αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž αžΆαž’αž˜αŸ’αž˜αž‡αžΆαžαž·αž˜αž½αž™αž…αŸ†αž“αž½αž“αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆ, αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αžΈαžŸαžΆαžαžΆ masterαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž‰αŸ’αž…αžΌαž›αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž•αž„αžŠαŸ‚αžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž…αŸ†αžŽαž»αž… (αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†) αž€αŸαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αžšαŸ”

αž‡αžΆαž‘αžΌαž‘αŸ… αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆαžœαžΆαž“αŸ…αžαŸ‚αžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ„αŸ‡αž…αŸ„αž›αž‚αŸ†αžšαžΌαžŠαžΎαž˜ αž•αŸ’αžαžΆαž…αŸ‹αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αŸ’αž“αŸ‚αž€αž“αžΆαž“αžΆ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαž–αžΈαžŠαŸ†αž”αžΌαž„αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αž˜αžΈαž‡αžΆαž„αž“αŸαŸ‡ αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αž–αžΈ master.

αž€αŸ†αž αž»αžŸαž›αŸαžαž–αžΈαžšαŸ– αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš TLP

αžŸαžšαž»αž”αž˜αž€ αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αŸ†αž αž»αžŸαž‘αŸ αž‡αžΆαž‘αžΌαž‘αŸ…αžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‚αž˜αŸ’αžšαŸ„αž„αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž€αžΆαžšαž™αž›αŸ‹αžαž»αžŸαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸƒ "αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆ αž“αž·αž„αžšαž”αŸ€αž”αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈ?" αž αžΎαž™αž‡αžΆαž‘αžΌαž‘αŸ… "αžαžΎαž™αžΎαž„αž“αžΉαž„αž‘αŸ…αžŠαž›αŸ‹αž‘αžΈαž“αŸ„αŸ‡?" αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹ αž‚αžΊαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž’αž˜αŸ’αž˜αž‡αžΆαžαž· αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž…αž„αŸ‹αž’αŸ’αžœαžΎαžœαžΆαž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ” αž›αžΎαž€αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αžˆαŸ’αž›αžΆαžŸαžœαŸƒαŸ– αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž’αžΆαžαžΌαž˜αž·αž€ αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΌαžŠαžŠαŸ„αž™αžŠαžΉαž„αžαŸ’αž›αž½αž“ (αž“αž·αž„αž˜αž·αž“αž˜αŸ‚αž“ "αž€αžΆαžšαžŠαžΆαž€αŸ‹αžαž½αž’αž€αŸ’αžŸαžšαž…αŸƒαžŠαž“αŸ’αž™αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαžšαž αžΌαžαž‘αžΆαž›αŸ‹αžαŸ‚αžœαžΆαž…αž„αž€αŸ’αžšαž„ (αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“)" αžŠαžΌαž…αžŠαŸ‚αž› Linus Torvalds αž’αŸ’αž›αžΆαž”αŸ‹αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹ αž“αŸαŸ‡αž”αžΎαž™αŸ„αž„αžαžΆαž˜ ​​Wikiquote) αŸ”αž›αŸ”

αž€αŸ†αž αž»αžŸαž‘αžΈ 3: αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž‘αžΉαž€αžŠαŸ„αž™αž˜αž·αž“αžŠαžΉαž„ ford

αžαŸ’αž‰αž»αŸ†αž“αŸ…αžαŸ‚αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž€αž˜αŸ’αž…αžΆαžαŸ‹αžœαžΆαž…αŸ„αž›αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž‘αžΎαž™αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž˜αž·αž“αžŠαžΎαžšαžαžΆαž˜αž˜αžΆαž‚αŸŒαžΆαž“αŸƒαž€αžΆαžšαžαžŸαŸŠαžΌαžαž·αž…αž”αŸ†αž•αž»αž αž αžΎαž™αž’αŸ’αžœαžΎαžœαžΆαžαžΆαž˜ "αžœαž·αž’αžΈαžŠαŸ‚αž›αž’αŸ†αž‘αžΎαž„" αž–αŸ„αž›αž‚αžΊαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™ TCG αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž–αžΈαžŠαŸ†αž”αžΌαž„ αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™ αžαŸ’αžšαžΌαžœαžαŸ‚αž“αž·αž™αžΆαž™αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αžαžΆ "αž”αžΆαž‘ αž“αŸαŸ‡αž‡αžΆαž€αžΆαžšαž–αž·αž αž™αžΊαžαŸ— αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αžΆαž“αž‘αŸ - αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž› TCI αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžš ... " αž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αž“αŸαŸ‡αž αžΆαž€αŸ‹αž”αžΈαžŠαžΌαž…αž‡αžΆαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžαžΆαŸ†αž„αž–αžΈαžŠαŸ†αž”αžΌαž„αž˜αž€αž˜αŸ’αž›αŸ‰αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαž‚αŸ„αž›αž–αžΈαžš. αžŠαžΌαž…αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž“αž·αž™αžΆαž™αžαžΆ "Ghent αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†Ρƒαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αž˜αž½αž™αž“αŸ„αŸ‡αž‘αŸβ€αŸ– αž–αž·αžαžŽαžΆαžŸαŸ‹αž€αžΌαžŠαž‚αžΊαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž‘αŸαžšαž‘αŸ…αžœαžΆαžŠαŸ„αž™αžŸαžΆαž˜αž‰αŸ’αž‰αž”αžΆαž“αž‘αŸ - αžœαžΆαžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž»αž‰αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„ αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžαŸ’αžαž»αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž–αžΈ JS world αžŠαŸ‚αž›αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžš αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž“αŸ…αž›αžΎαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ RISC αž’αž˜αŸ’αž˜αžαžΆ αžαžΆαž˜αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž™αž›αŸ‹ αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αž˜αŸ’αž˜αžαžΆαž‚αžΊαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž‘αžΎαž„αžœαž·αž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž“αžΌαžœαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΌαžŠαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰ - αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αŸ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ αžœαžΆαž‡αž·αžαžŠαž›αŸ‹αž αžΎαž™αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αž αž–αžΈαž€αžΆαžšαž”αŸ‰αž»αž“αž”αŸ‰αž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαžΉαž„αžαžΆαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž‘αŸ…αž•αŸ’αž“αŸ‚αž€αž€αžŽαŸ’αžαžΆαž›αž“αŸƒαž”αŸ’αž›αž»αž€αž”αž€αž”αŸ’αžšαŸ‚ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž–αž·αžαž‡αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžš bytecode αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž€αžŸαŸ’αžšαžΆαž™αž–αžΈαž’αž»αž αŸ’αžœαžŸαž·αžαžŽαžΆαž˜αž½αž™αž“αŸ„αŸ‡αž‘αŸ αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžœαžΆαžŠαŸ„αž™αžŸαžΆαž˜αž‰αŸ’αž‰αž–αžΈαž˜αž»αžαž„αžΆαžšαž“αŸ…αž›αžΎ TB .

αž–αž½αž€αž‚αŸαž”αžΆαž“αž˜αž€αž‘αžΆαžαŸ‹

αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž‘αžΎαž„αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ‚αž€αž€αŸ’αž€αžŠαžΆαž€αŸαžŠαŸ„αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž‘αžΆαžαŸ‹αžœαŸαž‘αž˜αž“αŸ’αžαž”αžΆαž“αž•αŸ’αž‘αž»αŸ‡αž‘αžΎαž„αžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž“αžšαžŽαžΆαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αŸ– αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžŸαŸ†αž”αž»αžαŸ’αžšαž–αžΈ GitHub αž˜αž€αžŠαž›αŸ‹αž‡αžΆαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž’αŸ†αž–αžΈαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αžŸαŸ†αžŽαžΎαž”αž‰αŸ’αž αžΆ αž“αž·αž„αž€αžΆαžšαž‘αžΆαž‰ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž—αŸ’αž›αžΆαž˜αŸ— αž›αžΎαž€αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™ Binaryen αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™ qemu αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘ "αž‚αžΆαžαŸ‹αž”αžΆαž“αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž“αŸ„αŸ‡αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž‚αžΆαžαŸ‹αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ’αžœαžΈαž˜αž½αž™" αŸ” αž™αžΎαž„αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αžšαž”αžŸαŸ‹ Emscripten αž”αŸŠαžΈαžŽαžΆαžšαžΈαž“ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž WASM JIT αŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ Apache 2.0 αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž αžΎαž™ QEMU αž‘αžΆαŸ†αž„αž˜αžΌαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αž“αŸ…αž€αŸ’αžšαŸ„αž˜ GPLv2 αž αžΎαž™αž–αž½αž€αžœαžΆαž˜αž·αž“αž†αž”αž‚αŸ’αž“αžΆαžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αŸ” αž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆαž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽαž’αžΆαž…αž‡αžΆ αž‡αž½αžŸαž‡αž»αž›αžœαžΆαžαžΆαž˜αžšαž”αŸ€αž”αžŽαžΆαž˜αž½αž™αŸ” (αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αžŠαžΉαž„αŸ– αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž”αŸ’αžŠαžΌαžšβ€‹αžœαžΆ αž”αŸ’αžšαž αŸ‚αž›β€‹αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽβ€‹αž–αžΈαžš αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž˜αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αž•αŸ’αžŸαŸαž„...)αŸ” αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž–αž·αžβ€‹αžŽαžΆαžŸαŸ‹β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αžαŸ’αž‰αž»αŸ†β€‹αžŸαž”αŸ’αž”αžΆαž™β€‹αž…αž·αžαŸ’αž αž–αŸ’αžšαŸ„αŸ‡β€‹αž–αŸαž›β€‹αž“αŸ„αŸ‡β€‹αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αž˜αžΎαž›β€‹αž™αŸ‰αžΆαž„β€‹αž‡αž·αžβ€‹αžŸαŸ’αž“αž·αž‘αŸ’αž’β€‹αž αžΎαž™αŸ” αž‘αž˜αŸ’αžšαž„αŸ‹αž‚αŸ„αž›αž–αžΈαžš WebAssembly αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž–αž·αžαž‡αžΆαžŸαŸ„αž€αžŸαŸ’αžαžΆαž™ αž“αž·αž„αž˜αž·αž“αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αŸ” αžœαžΆαž€αŸαž˜αžΆαž“αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž˜αž½αž™αžŠαŸ‚αž›αž“αžΉαž„αž›αŸαž”αž™αž€αž”αŸ’αž›αž»αž€αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ’αžšαžΆαž αŸ’αžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž”αž„αŸ’αž€αžΎαžαž›αŸαžαž€αžΌαžŠαž”αŸƒ αž αžΎαž™αžαŸ‚αž˜αž‘αžΆαŸ†αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αž•αŸ’αž‘αžΆαž›αŸ‹ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‘αŸ€αž αž›αž·αžαž·αžαž˜αž½αž™αŸ” αž“αŸ…αž›αžΎαž”αž‰αŸ’αž‡αžΈαžŸαŸ†αž”αž»αžαŸ’αžšαžšαž½αž˜αžšαž”αžŸαŸ‹ QEMU αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž‚αžΊαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžŸαŸ†αžŽαž½αžš "αžαžΎαž’αŸ’αž“αž€αžŽαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆ?" αž αžΎαž™αžœαžΆαž‚αžΊ αž—αŸ’αž›αžΆαž˜αŸ—αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆαžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ” αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž”αŸ†αž”αŸ‚αž€β€‹αž›αž‘αŸ’αž’αž—αžΆαž–β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹β€‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜β€‹αžšαž½αž˜β€‹αž‚αŸ’αž“αžΆ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž›αžΏαž“β€‹αž¬αžαž·αž…β€‹αž‡αžΆαž„αž“αŸαŸ‡αŸ–

  • αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αžœαžΈαž˜αž½αž™αžŠαŸ‚αž›αž’αž”αŸ‹αžšαŸ†αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ†αž‘αžΎαž„αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
  • αž“αž·αž˜αŸ’αž˜αž·αžαž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš iOS αžŠαŸ‚αž›αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αž–αžΆαž€αŸ’αž™αž…αž…αžΆαž˜αž’αžΆαžšαŸ‰αžΆαž˜αžαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαž—αŸ’αž›αžΆαž˜αŸ—αž‚αžΊαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ JS (αžαžΎαž“αŸαŸ‡αž‡αžΆαž€αžΆαžšαž–αž·αžαž‘αŸ?)
  • αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž–αžΈ mini-OS - single-floppy, built-in, αž‚αŸ’αžšαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž“αŸƒ firmware αŸ”αž›αŸ”

αž˜αž»αžαž„αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αž

αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αžšαž½αž…αž˜αž€αž αžΎαž™αžαžΆ QEMU αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž“αžΉαž„ multithreading αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αž˜αž·αž“αž˜αžΆαž“αžœαžΆαž‘αŸαŸ” αž˜αŸ‚αž“αž αžΎαž™ αž“αŸ„αŸ‡αž‚αžΊαž‡αžΆ αž‘αŸ... αžŠαŸ†αž”αžΌαž„αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ WebWorkers αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“ - αžαžΆαž˜αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž™αž›αŸ‹ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαž…αŸ’αžšαžΎαž“αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αžŸαžΆαžš αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž’αžαŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€. αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αžœαžΆαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž αžΆαž™αŸ‰αžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸ…αž–αŸαž›αž”αž‰αŸ’αž‡αžΌαž“αž€αžΌαžŠαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ†αžšαžΌαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž“αŸ…αž€αŸ’αžšαŸ„αž˜αžŸαž˜αŸ’αž–αžΆαž’αžŸαžΆαž’αžΆαžšαžŽαŸˆαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž€αŸ’αžšαŸ„αž˜αžˆαŸ’αž˜αŸ„αŸ‡ SharedArrayBuffers. αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž‡αžΆαž”αžŽαŸ’αžαžΎαžšαŸ— αž–αž½αž€αž‚αŸαž”αžΆαž“αž”αŸ’αžšαžΆαžšαž–αŸ’αž’αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αž½αž€αž‚αŸαž”αžΆαž“αž”αŸ’αžšαžΆαžšαž–αŸ’αž’αž–αž·αž’αžΈαž…αžΌαž›αž†αŸ’αž“αžΆαŸ†αžαŸ’αž˜αžΈ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžšαž›αžΆαž™... αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αž”αž„αŸ’αž€αžΎαž“αž€αžΆαžšαžšαžΆαž”αŸ‹ αžœαžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžœαžΆαž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ”. αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„αž”αž·αž‘αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš multithreading αžŠαŸ„αž™αž”αŸ’αžšαžΎαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αŸ” αžœαžΆαž αžΆαž€αŸ‹αž”αžΈαžŠαžΌαž…αž‡αžΆαž€αŸ’αžšαŸ„αž™αž˜αž€αž–αž½αž€αž‚αŸαž”αžΆαž“αž”αžΎαž€αžœαžΆαž‘αžΎαž„αžœαž·αž‰ αž”αŸ‰αž»αž“αŸ’αžαŸ‚ αžŠαžΌαž…αžŠαŸ‚αž›αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αž–αžΈαž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαžŠαŸ†αž”αžΌαž„ αžœαžΆαž“αŸ…αž˜αžΆαž“αž‡αžΈαžœαž·αžαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αžœαžΆ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αž˜αž·αž“αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎ multithreading αŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αžΈαž–αžΈαžšαž‚αžΊαž—αžΆαž–αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž“αŸƒαž§αž”αžΆαž™αž€αž›αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αž‡αžΆαž˜αž½αž™αž‡αž„αŸ‹αŸ– αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž™αž€ αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž”αžšαž·αž”αž‘αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž αžΎαž™αž”αŸ’αžαžΌαžšαž‘αŸ…αžαŸ’αž˜αžΈαž˜αž½αž™αž‡αžΆαž˜αž½αž™αž‡αž„αŸ‹αžαŸ’αž˜αžΈαŸ” αž‡αž„αŸ‹αž€αžΆαžšαž αŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ„αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž JS αŸ” αžœαžΆαž αžΆαž€αŸ‹αž”αžΈαžŠαžΌαž…αž‡αžΆαž”αž‰αŸ’αž αžΆαž’αŸ’αžœαžΈ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž™αžΎαž„αž“αŸ…αžαŸ‚αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αŸ†αž αžΌαžšαž–αžΈαž˜αž»αž“αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αžŠαŸ„αž™αžŠαŸƒ? αž€αžΆαžšαž–αž·αžαž‚αžΊαžαžΆαž”αŸ’αž›αž»αž€ I/O αž“αŸ…αž€αŸ’αž“αž»αž„ QEMU αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžαžΆαž˜αžšαž™αŸˆ coroutines αž αžΎαž™αž“αŸαŸ‡αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž‡αž„αŸ‹αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αž“αžΉαž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαŸ” αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’ Emscipten αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αžŸαž˜αž€αžΆαž› αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž–αžΈαžšαŸ– αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ ΠΈ αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚. αž‘αžΈαž˜αž½αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆαž€αžΌαžŠ JavaScript αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž αžΎαž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αŸ€αžαž‘αŸαŸ” αž‘αžΈαž–αžΈαžšαž‚αžΊαž‡αžΆ "αžœαž·αž’αžΈαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ" αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž bytecode αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αžŠαžΎαž˜αŸ” αž–αž·αžαžŽαžΆαžŸαŸ‹ αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αžΊαžαŸ— αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΌαžŠαžαžΌαž…αž“αŸ„αŸ‡αž‘αŸαŸ” αž–αž·αž αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ coroutines αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αž“αŸ’αžαž€αžΆαžšαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αžŠαŸ„αž™αž―αž€αžšαžΆαž‡αŸ’αž™ (αž˜αžΆαž“ coroutines αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžšαž½αž…αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Asyncify αž αžΎαž™αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž› API αžŠαžΌαž…αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Emterpreter αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž–αž½αž€αžœαžΆ)αŸ”

αž“αŸ…αž–αŸαž›αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž‘αžΆαž“αŸ‹αž’αžΆαž…αž”αŸ†αž”αŸ‚αž€αž€αžΌαžŠαž‘αŸ…αž‡αžΆαž˜αž½αž™αžŠαŸ‚αž›αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž“αŸ…αž€αŸ’αž“αž»αž„ WASM αž“αž·αž„αž”αž€αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎ Emterpreter αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž§αž”αž€αžšαžŽαŸαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž‘αžΎαž™αž‘αŸ (αžŸαžΌαž˜αž˜αžΎαž›αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸŠαŸαžšαžΈαž”αž“αŸ’αž‘αžΆαž”αŸ‹ αžŠαžΌαž…αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž“αž·αž™αžΆαž™...)αŸ” αž“αŸ„αŸ‡β€‹αž‚αžΊβ€‹αž“αŸ…β€‹αž‘αžΈβ€‹αž”αž‰αŸ’αž…αž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αž‚αž½αžšβ€‹αžαŸ‚β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αž˜αž½αž™β€‹αžŠαžΌαž…β€‹αž‡αžΆβ€‹αžšαžΏαž„β€‹αžŸαŸ’αžšαž‘αžΆαž”αŸ‹β€‹αž‚αž½αžšβ€‹αž±αŸ’αž™β€‹αž’αžŸαŸ‹β€‹αžŸαŸ†αžŽαžΎαž…β€‹αž“αŸαŸ‡β€‹:

  • αž”αŸ’αž›αž»αž€ I/O αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž€αžŸαŸ’αžšαžΆαž™αŸ” αž˜αŸ‚αž“αž αžΎαž™ αžαžΎαž’αŸ’αž“αž€αž–αž·αžαž‡αžΆαžšαŸ†αž–αžΉαž„αžαžΆαž“αžΉαž„αž’αŸ’αžœαžΎαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜ NVMe αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŸαž˜αŸ’αžαŸ‚αž„αžŠαžΎαž˜αž˜αŸ‚αž“αž‘αŸ? πŸ™‚
  • αž€αžΌαžŠ QEMU αž…αž˜αŸ’αž”αž„αžŠαŸ‚αž›αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαžŸαŸ’αžαžΆαž–αžš (αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚ αž§αž”αž€αžšαžŽαŸαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αŸ”αž›αŸ”)
  • αž…αž„αž€αŸ’αžšαž„αž€αžΌαžŠαž—αŸ’αž‰αŸ€αžœαžŠαŸ„αž™αžαžΆαž˜αžœαž“αŸ’αžαž‘αŸ…αž€αŸ’αž“αž»αž„ WASM

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž“αŸƒαž”αŸ’αžšαž—αž– QEMU

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž”αžΆαž“αž‘αžΆαž™αžšαž½αž…αž αžΎαž™ αž€αžΌαžŠαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž€αžΌαžŠαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ‚αž€αž“αŸ…αž€αŸ’αž“αž»αž„ QEMU αŸ” αžαžΆαž˜β€‹αž–αž·αž αžœαžΆβ€‹αžšαžΉαžαžαŸ‚β€‹αž–αž·αž”αžΆαž€β€‹αž”αž“αŸ’αžαž·αž…αŸ–

  • αž˜αžΆαž“αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž—αŸ’αž‰αŸ€αžœ
  • αž‚αžΊ αž§αž”αž€αžšαžŽαŸαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž–αŸ„αž›αž‚αžΊ KVM αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αž·αž˜αŸ’αž˜αž·αžαž•αŸ’αž“αŸ‚αž€αžšαžΉαž„αž“αŸ…αž›αžΎαž›αžΈαž“αž»αž… (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ) TCG αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠ JIT αž‚αŸ’αžšαž”αŸ‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„αŸ” αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ QEMU 2.9 αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž“αž·αž˜αŸ’αž˜αž·αžαž•αŸ’αž“αŸ‚αž€αžšαžΉαž„ HAXM αž“αŸ…αž›αžΎ Windows αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“ (αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž)
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎ TCG αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž‡αžΆαž„αž€αžΆαžšαž“αž·αž˜αŸ’αž˜αž·αžαž•αŸ’αž“αŸ‚αž€αžšαžΉαž„ αž“αŸ„αŸ‡αžœαžΆαž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αžΈαž˜αž½αž™αŸ— αž€αŸαžŠαžΌαž…αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αž‡αžΆαžŸαž€αž›αž•αž„αžŠαŸ‚αžšαŸ”
  • ... αž“αž·αž„αž‡αž»αŸ†αžœαž·αž‰αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡ - αž‚αŸ’αžšαžΏαž„αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžŠαŸ‚αž›αž”αžΆαž“αžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜ αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€ αž€αžΆαžšαžαžαž‘αžΎαž„αžœαž·αž‰ αž‡αžΆαžŠαžΎαž˜αŸ”

αž“αž·αž™αžΆαž™αž’αžΈαž‰αŸ’αž…αžΉαž„αžαžΎαž’αŸ’αž“αž€αžŠαžΉαž„αž‘αŸαŸ– QEMU αž’αžΆαž…αžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž‘αžΆαŸ†αž„αž˜αžΌαž›αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ‚αž˜αž‘αžΆαŸ†αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΊαžŽαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ„αž™ AFL fuzzer αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž‚αŸ„αž›αž–αžΈαžšαŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž…αž„αŸ‹αž”αž‰αŸ’αž‡αžΌαž“αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸαŸ‡αžšαž”αžŸαŸ‹ QEMU αž‘αŸ… JS? πŸ˜‰

αžŠαžΌαž…αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžŠαŸ‚αž›αž˜αžΆαž“αžšαž™αŸˆαž–αŸαž›αž™αžΌαžšαž”αŸ†αž•αž»αž QEMU αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘ configure ΠΈ make. αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž’αŸ’αž“αž€αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ’αžœαžΈαž˜αž½αž™αŸ– αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™ TCG αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™ αž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž€αž»αŸ†αž”αŸ’αžšαž‰αžΆαž”αŸ‹αž”αŸ’αžšαž‰αžΆαž›αŸ‹αžšαžΈαž€αžšαžΆαž™ / αžšαž“αŸ’αž’αžαŸ‹ (αž‚αžΌαžŸαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΈαž€αŸ’αžšαŸ„αž˜αžαžΆαž˜αž€αžΆαžšαžŸαž˜αžšαž˜αŸ’αž™) αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αžαž“αŸƒαž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™ Autoconf - αžαžΆαž˜αž–αž·αž configure QEMU αž‘αŸ†αž“αž„αž‡αžΆαžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž αžΎαž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž–αžΈαž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸαŸ”

WebAssembly αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαžΎαž’αŸ’αžœαžΈαž‘αŸ…αžŠαŸ‚αž›αž αŸ…αžαžΆ WebAssembly (αž αŸ…αž€αžΆαžαŸ‹αžαžΆ WASM)? αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž‡αŸ†αž“αž½αžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Asm.js αž›αŸ‚αž„αž’αŸ’αžœαžΎαž–αž»αžαž‡αžΆαž€αžΌαžŠ JavaScript αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αžœαžΆαž‚αžΊαž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŸαž»αž‘αŸ’αž’αžŸαžΆαž’ αž“αž·αž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžš αž αžΎαž™αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŸαžšαžŸαŸαžšαž…αŸ†αž“αž½αž“αž‚αžαŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž˜αž·αž“αžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαž“αŸ„αŸ‡αž‘αŸαŸ– αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αžšαž½αž˜ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ αž‘αŸαž” ៨.

αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž’αŸ’αž›αžΆαž”αŸ‹αž”αžΆαž“αž›αžΊαž’αŸ†αž–αžΈαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΆαžšαž”αž„αŸ’αžœαž·αž›αž‘αžΎαž„αžœαž·αž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Asm.js - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžŸαŸ’αžŠαžΆαžšαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž›αŸ†αž αžΌαžš "αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹" (αž“αŸ„αŸ‡αž‚αžΊαž”αŸ’αžšαžŸαž·αž“αž”αžΎ - αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ - αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αŸ” αž›αŸ” ) αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ JS αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αž–αžΈ LLVM IR αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αžαž·αžαž‘αŸ…αž‡αž·αžαž›αŸαžαž€αžΌαžŠαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžαž½αžšαž€αŸ’αž”αžΆαž›αŸ” αžαžΆαž˜αž’αž˜αŸ’αž˜αž‡αžΆαžαž· αžαŸ†αžŽαžΆαž„αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αž“αŸƒ QEMU αž‚αžΊαžαž·αžαž‘αŸ…αž‡αž·αžαž‘αžΈαž–αžΈαžšαŸ” αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡αžœαžΆαž‚αžΊαž‡αžΆ bytecode αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž‘αžΆαžšαž»αžŽαž€αž˜αŸ’αž˜... αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αžΆαž“αž”αŸ’αž›αž»αž€ αž”αŸ’αžšαžŸαž·αž“αž”αžΎ-αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€-αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž“αž·αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†!..

αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž αŸαžαž»αž•αž›αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž› Binaryen αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸ: αžœαžΆαž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αŸ’αž›αž»αž€αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αžŠαŸ„αž™αž’αž˜αŸ’αž˜αž‡αžΆαžαž·αž“αŸ…αž‡αž·αžαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„ WASM αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž€αŸαž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαž–αžΈαž€αŸ’αžšαžΆαž αŸ’αžœαž“αŸƒαž”αŸ’αž›αž»αž€αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž“αž·αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαžœαžΆαž„αž–αž½αž€αžœαžΆαž•αž„αžŠαŸ‚αžšαŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αžšαž½αž…αž αžΎαž™αžαžΆαžœαžΆαž›αžΆαž€αŸ‹αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž•αŸ’αž‘αž»αž€ WebAssembly αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™ C/C ++ API αžŠαŸ‚αž›αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ”

TCG (αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαžαžΌαž…)

αžŸαŸŠαžΈαž‡αžΈαž‡αžΈ αžŠαžΎαž˜αž‘αžΎαž™ αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž„αž€αŸ’αžšαž„ C αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αž”αŸ‹αž‘αž›αŸ‹αž“αžΉαž„αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž‡αžΆαž˜αž½αž™ GCC αž”αžΆαž“αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αžœαžΆαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž€αž“αŸ’αž›αŸ‚αž„αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ QEMU αž‡αžΆαž™αž“αŸ’αžαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αžœαžΆαž€αŸαž˜αžΆαž“ backend TCG αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαž abstract bytecode αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž—αŸ’αž›αžΆαž˜αŸ—αžŠαŸ„αž™αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž”αŸ’αžšαžΎαžœαžΆαž“αŸ…αž–αŸαž›αž“αŸαŸ‡αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ 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-sαŸ–

  • αžαžΎαž˜αžΆαž“αž€αžΆαžšαž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“ αž“αž·αž„αž‘αž‘αžΉαž„αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž“αŸ…αž›αžΎαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž‚αŸ„αž›αžŠαŸ… (αž™αžΎαž„αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αžαžΆαž˜αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“ αž…αŸ’αžšαžΎαž“αžαžΆαž˜αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“ - αžŸαŸ†αžŽαž½αžšαž‚αžΊαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αŸ…αž‡αžΆαž€αžΌαžŠαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž‡αžΆαž„αž˜αž»αž“αžŠαŸ„αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αžαžΆαž˜αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž›αžΎαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ "αž‚αŸ„αž›αžŠαŸ…αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„" ...)
  • αž€αžΆαžšαžαž˜αŸ’αžšαžΉαž˜αž“αŸƒαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ– αž“αŸ…αž›αžΎ x86 αž“αž·αž„αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ TCI αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž˜αŸ’αžšαžΉαž˜αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžŠαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž€αžΌαžŠαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αž„αŸ’αž’αž»αž›αž‘αŸ…αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αžŽαŸ’αžŽαžΆαž›αŸαž™ Binaryen αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αžαžΆαŸ– 4 αž”αŸƒ
  • αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž”αžΆαž“ - αž™αžΎαž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž™αžΎαž„αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ Binaryen αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž§αž”αž€αžšαžŽαŸαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž”αŸ†αž”αŸ‚αž€αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹αž‘αŸ…αž‡αžΆαžŸαžΆαž˜αž‰αŸ’αž‰αž‡αžΆαž„αžŠαŸ„αž™αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αŸ”
  • αžαžΎαž‘αŸ†αž αŸ†αž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž›αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ TLB αžŠαŸ‚αž›αžŸαŸ’αž“αžΎαžŸαž»αŸ†αžŠαŸ„αž™αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αŸ” αž€αžΆαžšαž–αž·αžαž‚αžΊαžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ QEMU αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžš: αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž‡αŸ†αž“αž½αž™αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž•αŸ’αž‘αž»αž€ / αž αžΆαž„αžŠαŸ„αž™αž‚αž·αžαž–αžΈ MMU αž—αŸ’αž‰αŸ€αžœ (αžαžΎαž™αžΎαž„αž“αžΉαž„αž“αŸ…αž―αžŽαžΆαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αžœαžΆαž₯αž‘αžΌαžœαž“αŸαŸ‡?) αž–αž½αž€αž‚αŸαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αž›αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αž„αŸ’αž€αž”αŸ‹αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αž•αŸ’αžŸαžΆαž™αŸ” αžŸαŸ†αžŽαž½αžšαž‚αžΊαžαžΆαžαžΎαž’αŸ’αžœαžΈαž‘αŸ…αž‡αžΆαž’αž»αž αŸ’αžœαžŸαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž”αŸ†αž•αž»αžαžŠαŸ„αž™αž›αŸ†αžŠαžΆαž”αŸ‹αžαžΌαž… αž“αž·αž„αž›αžΏαž“αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ?
  • αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αž‚αŸ„αž›αž”αŸ†αžŽαž„αž“αŸƒαž€αžΆαžšαž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž”αžΆαž“αž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αž˜αž½αž™ αž¬αž–αžΈαžš αž”αžΎαž€αž€αžΆαžšαž αŸ… TB αžαžΆαž˜αžšαž™αŸˆαž˜αž»αžαž„αžΆαžšαž˜αž½αž™ αž“αž·αž„αž–αžŽαŸŒαž“αžΆαž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž–αžΈαžšαž”αžΈαžαžΌαž…αŸ” inline- αž˜αž»αžαž„αžΆαžšαžŠαžΌαž…αž‡αžΆ flush_icache_range (αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ)

αž―αž€αžŸαžΆαžš tcg-target.inc.cαž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αžΆαž“αž‘αŸ†αž αŸ†αž’αŸ†αž‡αžΆαž„ αž“αž·αž„αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ–

  • αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž›αžΎαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŠαŸ‚αž›αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎ operands αžŽαžΆαž˜αž½αž™αŸ” αž…αž˜αŸ’αž›αž„αžŠαŸ„αž™αžαŸ’αž‰αž»αŸ†αž–αžΈαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αž˜αž½αž™αž‘αŸ€αž
  • αž’αž“αž»αž‚αž˜αž“αŸβ€‹αžŠαŸ‚αž›β€‹αž‘αž‘αž½αž›β€‹αž™αž€β€‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†β€‹αž€αžΌαžŠβ€‹αž”αŸƒβ€‹αžαžΆαž„αž€αŸ’αž“αž»αž„β€‹αž˜αž½αž™β€‹
  • αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αžŠαžΆαž€αŸ‹αž˜αž»αžαž„αžΆαžšαž‡αŸ†αž“αž½αž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž αžΎαž™αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαž‹αž·αžαž·αžœαž“αŸ’αžαž–αžΈ 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αž“αŸ„αŸ‡αž‚αžΊαž–αž½αž€αž‚αŸαž˜αžΎαž›αž€αž“αŸ’αžŸαŸ„αž˜αžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αž‡αžΆαž›αžΈαž“αŸαž’αŸŠαŸ‚αžšαž‘αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž•αŸ’αž“αŸ‚αž€αž‚αžΊαž‡αžΆαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαžœαžΆαž„ BBs αž•αŸ’αž“αŸ‚αž€αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‘αŸ…αŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αž˜αžΆαž“αž”αŸ’αž›αž»αž€αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αž…αŸ†αžšαž½αž…αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Relooper αžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž—αŸ’αž‡αžΆαž”αŸ‹αžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž–αž½αž€αžœαžΆ αž€αžΆαžšαžŸαž“αŸ’αž˜αžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžαžΆαž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž˜αŸ’αžšαžΉαž˜αžŠαŸ„αž™αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž”αž½αž“αž”αŸƒ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸŠαžΈαžαž–αžΈαžšαž™αŸ‰αžΆαž„αžαž·αž…αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ„αž™αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αžΆαŸ†αžαžΆαžαŸ’αžšαžΌαžœαž™αž€αžœαžΆαž…αŸαž‰αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ” αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αžŸαŸ’αž›αžΆαž€αž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„ QEMU αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž αŸαžαž»αž•αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΆαž€αž…αŸαž‰αž–αžΈαžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ† TCG αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Binaryen

αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸ…αž€αŸ’αž“αž»αž„ WebAssembly αž˜αžΆαž“αž˜αž»αžαž„αžΆαžš αžŠαŸ‚αž›αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αžαž½ αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αžŸαŸ„αž˜αŸ” αž€αž“αŸ’αžŸαŸ„αž˜β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš unary αž“αž·αž„ binary αž”αŸ’αž›αž»αž€β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΈβ€‹αž€αž“αŸ’αžŸαŸ„αž˜β€‹αž•αŸ’αžŸαŸαž„β€‹αž‘αŸ€αž αž›αŸ†αž αžΌαžšβ€‹αžœαžαŸ’αžαž»β€‹αž”αž‰αŸ’αž‡αžΆαŸ”αž›αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αžšαž½αž…αž˜αž€αž αžΎαž™ αž›αŸ†αž αžΌαžšαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž™αŸ‰αžΆαž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžŸαžΆαžαžΆαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹ αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ† αž€αžΆαžšαž αŸ…αž˜αž»αžαž„αžΆαžšαž‡αžΆαžŠαžΎαž˜αŸ” αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹β€‹αž‘αŸ…β€‹αž˜αž»αžαž„αžΆαžšβ€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΌαž“β€‹αž‘αŸ…β€‹αž›αžΎβ€‹αž‡αž„αŸ‹β€‹αž“αŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αžŽαžΆαžŸαŸ‹ αžŠαžΌαž…β€‹αž‡αžΆβ€‹αž“αŸ…β€‹αž€αŸ’αž“αž»αž„ JS αžŠαŸ‚αžšαŸ” αžœαžΆαž€αŸαž˜αžΆαž“αž’αžαŸαžšαžŸαž€αž›αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αž”αŸ’αžšαžΎαžœαžΆαž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αŸ†αž–αžΈαž–αž½αž€αžœαžΆαž‘αŸαŸ”

αž’αž“αž»αž‚αž˜αž“αŸβ€‹αž€αŸβ€‹αž˜αžΆαž“β€‹αž’αžαŸαžšβ€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž›αŸαžβ€‹αž–αžΈβ€‹αžŸαžΌαž“αŸ’αž™β€‹αž“αŸƒβ€‹αž”αŸ’αžšαž—αŸαž‘αŸ– int32 / int64 / float / double αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ ធថេរ n αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ†αž”αžΌαž„αž‚αžΊαž‡αžΆαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž’αž“αž»αž‚αž˜αž“αŸαŸ” αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž’αŸ’αžœαžΈαŸ—αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž›αŸ†αž αžΌαžšαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸαžŠαŸ„αž™ αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αž“αŸ…αžαŸ‚αž˜αž·αž“αž’αž“αž»αžœαžαŸ’αžαž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆ "αž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆ/αž˜αž·αž“αž”αžΆαž“αž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆ"αŸ– αžšαž”αŸ€αž”αžŠαŸ‚αž›αž›αŸαžαž˜αžΆαž“αž₯αžšαž·αž™αžΆαž”αž‘αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž›αŸαžαž€αžΌαžŠαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”

αž“αž·αž™αžΆαž™αž‡αžΆαž‘αžΌαž‘αŸ… Binaryen αž•αŸ’αžαž›αŸ‹ C-API αžŸαžΆαž˜αž‰αŸ’αž‰αŸ– αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΌαžŒαž»αž›αž˜αž½αž™ αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αžΆαžαŸ‹ αž”αž„αŸ’αž€αžΎαžαž€αž“αŸ’αžŸαŸ„αž˜ - unary, binary, blocks αž–αžΈ expressions αž•αŸ’αžŸαŸαž„αž‘αŸ€αž, control flow αŸ”αž›αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž’αŸ’αž“αž€β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž’αž“αž»αž‚αž˜αž“αŸβ€‹αž˜αž½αž™β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž€αž“αŸ’αžŸαŸ„αž˜β€‹αž‡αžΆβ€‹αžαž½β€‹αžšαž”αžŸαŸ‹β€‹αžœαžΆαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŠαžΌαž…αžαŸ’αž‰αž»αŸ†αžŠαŸ‚αžš αž˜αžΆαž“αž€αŸ’αžšαžΆαž αŸ’αžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αžŸαž˜αžΆαžŸαž’αžΆαžαž» relooper αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αŸ” αžαžΆαž˜αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž™αž›αŸ‹ αžœαžΆαž’αžΆαž…αž”αŸ’αžšαžΎαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž›αŸ†αž αžΌαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αž˜αž½αž™ αžŠαžšαžΆαž”αžŽαžΆαžœαžΆαž˜αž·αž“αž αž½αžŸαž–αžΈαž–αŸ’αžšαŸ†αžŠαŸ‚αž“αž“αŸƒαž”αŸ’αž›αž»αž€ - αž“αŸ„αŸ‡αž‚αžΊαžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αž•αŸ’αž›αžΌαžœαžαžΆαž„αž€αŸ’αž“αž»αž„αž›αžΏαž“ / αž™αžΊαžαŸ” αž•αŸ’αž›αžΌαžœαž”αŸ†αž”αŸ‚αž€αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž€αžΌαžŠαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ TLB αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ’αžšαŸ€αžαž‡αŸ’αžšαŸ‚αž€αž‡αžΆαž˜αž½αž™αž›αŸ†αž αžΌαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ "αžαžΆαž„αž€αŸ’αžšαŸ…" αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αž›αŸ‚αž„ relooper αž”αŸ’αž›αž»αž€αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αž›αŸ‚αž„ αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αž›αŸ‚αž„αž˜αŸ‰αžΌαžŒαž»αž› αž€αž“αŸ’αžŸαŸ„αž˜ αž˜αž»αžαž„αžΆαžšαŸ”αž›αŸ” αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž‘αŸ…αžœαžΆαž”αžΆαžαŸ‹αŸ” αžŸαž„αŸ’αžœαŸ€αž“.

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž€αžŸαŸ’αžšαžΆαž™αž€αžΌαžŠαž—αŸ’αž›αžΆαž˜αŸ—αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž›αž»αž”αž§αž‘αžΆαž αžšαžŽαŸαž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚ αžœαžΆαžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸαŸ‡αž‘αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš 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 αž αžΎαž™αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž”αžΆαž“αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž’αžΆαžšαŸαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ (αžαžΆαžšαžΆαž„αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ launcher) αž αžΎαž™αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‚αžŽαž“αžΆαž›αž·αž”αž·αž€αŸ’αžšαž˜αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸƒαž”αŸ’αž›αž»αž€αž”αž€αž”αŸ’αžšαŸ‚αž–αžΆαž€αŸ’αž™αžŸαžΌαž“αŸ’αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ†αž”αžΌαž„αž‡αžΆαžœαžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž”αžΆαž“αž‚αžŽαž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαžšαžΌαž”αž˜αž“αŸ’αžαž“αŸαŸ‡αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαž˜αž‘αŸ…αž“αžΉαž„αžœαžΆαž›αž“αŸ…αž€αŸ’αž“αž»αž„ struct TranslationBlock.

αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡, αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰ (αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž˜αžΆαž“αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽαžŸαŸ’αžšαž–αž·αž…αžŸαŸ’αžšαž–αž·αž›) αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ Firefox αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Chrome αžŠαžΌαž…αž˜αŸ’αžŠαŸαž…αžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž“αŸ‹αžšαž½αž…αžšαžΆαž›αŸ‹ αž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž…αž„αŸ‹αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΌαžŒαž»αž› WebAssembly αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž˜αž½αž™αž–αžΆαž“αŸ‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž–αž½αž€αž‚αŸαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αŸ‚αž„αž…αŸ‚αž€αž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αž·αž˜αŸ’αž˜αž·αžαž˜αž½αž™αž‡αžΈαž αŸ’αž‚αžΆαž”αŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ— ...

αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡αŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αžΉαž„αž˜αžΆαž“αž’αžαŸ’αžαž”αž‘αž˜αž½αž™αž‘αŸ€αžαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαŸ” αž–αŸ„αž›αž‚αžΊαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž“αŸ…αžŸαž›αŸ‹ αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž’αŸ’αžœαžΎαž±αŸ’αž™αž§αž”αž€αžšαžŽαŸαž”αŸ’αž›αž»αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžœαžΆαž€αŸαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŸαž˜αž αŸαžαž»αž•αž›αž•αž„αžŠαŸ‚αžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αž“αŸƒαž˜αŸ‰αžΌαžŒαž»αž› WebAssembly αž˜αžΆαž“αž—αžΆαž–αž’αžŸαž˜αž€αžΆαž› αžŠαžΌαž…αž‘αž˜αŸ’αž›αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž– JS αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž“αŸ…αžαŸ‚αž˜αžΆαž“αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž”αžΆαž“αžšαž αžΌαžαžŠαž›αŸ‹αž˜αŸ‰αžΌαžŒαž»αž›αžŠαžΎαž˜αžšαž½αž…αžšαžΆαž›αŸ‹αŸ”

αž‡αžΆβ€‹αž…αž»αž„β€‹αž€αŸ’αžšαŸ„αž™β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αž™αž›αŸ‹β€‹αž…αŸ’αžšαž‘αŸ†β€‹αž˜αž½αž™β€‹: αž’αŸ’αž“αž€αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαž“αŸ…αž›αžΎαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ 32 αž”αŸŠαžΈαž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΌαžŠαžαžΆαž˜αžšαž™αŸˆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž‘αžΎαž„αž–αžΈ Binaryen αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αž“αŸ…αž›αžΎαž‡αž„αŸ‹ αž¬αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎ 2 GB αž“αŸƒαž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ 32 αž”αŸŠαžΈαžαŸ” αž”αž‰αŸ’αž αžΆαž‚αžΊαžαžΆαžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαžšαž”αžŸαŸ‹ Binaryen αž“αŸαŸ‡αž€αŸ†αž–αž»αž„αž…αžΌαž›αž”αŸ’αžšαžΎαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž›αž‘αŸ’αž’αž•αž›αž’αŸ†αž–αŸαž€αŸ” αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž“αŸ…αž‡αž»αŸ†αžœαž·αž‰αž“αŸαŸ‡?

αžαžΆαž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹admin

αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž“αŸαŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ†αž“αž·αžαžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‚αžΊ "αž…αž»αŸ‡αž”αžΎαžαŸ’αž‰αž»αŸ†αžŠαŸ†αž‘αžΎαž„αž›αžΈαž“αž»αž… 32 αž”αŸŠαžΈαž?" αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎαž“αŸƒαž‘αŸ†αž αŸ†αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αžŠαŸ„αž™αžαžΊαžŽαŸ‚αž›αŸ” αžŸαŸ†αžŽαž½αžšαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαžαžΆαžαžΎαž…αŸ†αž“αž½αž“αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹: 1 ឬ 2 Gb αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (αž‡αž˜αŸ’αžšαžΎαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αž)

αžαŸ„αŸ‡αž•αŸ’αž›αž»αŸ†αž–αž–αž»αŸ‡αž˜αž½αž™αž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž›αžΎαž“αŸƒαž€αž“αŸ’αž›αŸ‚αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αŸ” αžαŸ’αž‰αž»αŸ†β€‹αž•αŸ’αž‘αžΆαž›αŸ‹β€‹αž˜αž·αž“β€‹αž™αž›αŸ‹β€‹αžαžΆβ€‹αž αŸαžαž»β€‹αž’αŸ’αžœαžΈβ€‹αž”αžΆαž“β€‹αž‡αžΆβ€‹αžœαžΆβ€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžš - αž“αŸ…β€‹αž‘αžΈαž“αŸ„αŸ‡β€‹ αžšαž½αž…αž‘αŸ…αž αžΎαž™ αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž‡αž„αŸ‹αž˜αž½αž™αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚ "αž™αžΎαž„αž‡αžΆαž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αžαŸ– αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžŠαžΉαž„αž–αžΈαž˜αžΌαž›αž αŸαžαž»..."

// 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹