QEMU.js: āĻāĻ–āύ āϏāĻŋāϰāĻŋāϝāĻŧāĻžāϏ āĻāĻŦāĻ‚ WASM āĻāϰ āϏāĻžāĻĨ⧇

āĻāĻ• āϏāĻŽāϝāĻŧ āφāĻŽāĻŋ āĻŽāϜāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϞāĻžāĻŽ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āĻŦāĻŋāĻĒāϰ⧀āϤāϤāĻž āĻĒā§āϰāĻŽāĻžāĻŖ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻŽā§‡āĻļāĻŋāύ āϕ⧋āĻĄ āĻĨ⧇āϕ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ (āφāϰ⧋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇, Asm.js) āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ āϤāĻž āĻļāĻŋāϖ⧁āύāĨ¤ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ QEMU āĻŦ⧇āϛ⧇ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ āĻĒāϰ⧇ āĻšāĻžāĻŦāϰ⧇āϰ āωāĻĒāϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧ āϞ⧇āĻ–āĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻŽāĻ¨ā§āϤāĻŦā§āϝ⧇ āφāĻŽāĻžāϕ⧇ WebAssembly-āĻ āĻĒā§āϰ⧋āĻœā§‡āĻ•ā§āϟāϟāĻŋ āϰāĻŋāĻŽā§‡āĻ• āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āĻāĻŦāĻ‚ āĻāĻŽāύāĻ•āĻŋ āύāĻŋāĻœā§‡āϕ⧇ āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŽāĻžāĻĒā§āϤ āφāĻŽāĻŋ āϕ⧋āύ⧋āĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āϚāĻžāχāύāĻŋ... āĻ•āĻžāϜ āϚāϞāĻ›āĻŋāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϖ⧁āĻŦ āϧ⧀āϰ⧇ āϧ⧀āϰ⧇, āĻāĻŦāĻ‚ āĻāĻ–āύ, āϏāĻŽā§āĻĒā§āϰāϤāĻŋ āϏ⧇āχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇ āĻšāĻžāϜāĻŋāϰ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻŦāĻŋāώāϝāĻŧ⧇āϰ āωāĻĒāϰ "āϤāĻžāĻšāϞ⧇ āĻāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻļ⧇āώ āĻšāϞ?" āφāĻŽāĻžāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āωāĻ¤ā§āϤāϰ⧇āϰ āϜāĻŦāĻžāĻŦ⧇, āφāĻŽāĻŋ āĻļ⧁āύ⧇āĻ›āĻŋ "āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āĻŽāϤ⧋ āĻļā§‹āύāĻžāĻšā§āϛ⧇āĨ¤" āĻ­āĻžāϞ, āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒāĻžāϰ⧇āύ, āĻāĻ•āϟāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧ āĻšāĻŦ⧇. āĻšāϝāĻŧāϤ⧋ āϕ⧇āω āĻāϟāĻž āĻĻāϰāĻ•āĻžāϰ⧀ āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻŦ⧇āύ. āĻāϟāĻŋ āĻĨ⧇āϕ⧇ āĻĒāĻžāĻ āĻ• QEMU āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āĻļāύ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āĻĄāĻŋāϜāĻžāχāύ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻŋāϛ⧁ āϤāĻĨā§āϝ āĻļāĻŋāĻ–āĻŦ⧇, āϏ⧇āχāϏāĻžāĻĨ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϜāĻžāĻ¸ā§āϟ-āχāύ-āϟāĻžāχāĻŽ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧāĨ¤

āĻ•āĻ°ā§āĻŽ

āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻļāĻŋāϖ⧇āĻ›āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ QEMU āĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ, āĻāχāĻŦāĻžāϰ āĻāϟāĻŋ āĻŦ⧁āĻĻā§āϧāĻŋāĻŽāĻžāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ āĻĒ⧁āϰāĻžāύ⧋ āϭ⧁āϞ⧇āϰ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āύāĻž āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

āĻ¤ā§āϰ⧁āϟāĻŋ āύāĻŽā§āĻŦāϰ āĻāĻ•: āĻŦāĻŋāĻ¨ā§āĻĻ⧁ āĻĒā§āϰāĻ•āĻžāĻļ āĻĨ⧇āϕ⧇ āĻļāĻžāĻ–āĻž

āφāĻŽāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āϭ⧁āϞ āĻ›āĻŋāϞ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ 2.4.1 āĻĨ⧇āϕ⧇ āφāĻŽāĻžāϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āĻĢā§‹āĻ°ā§āĻ• āĻ•āϰāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āĻāϟāĻŋ āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āϧāĻžāϰāĻŖāĻž āĻŦāϞ⧇ āĻŽāύ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ: āϝāĻĻāĻŋ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϰāĻŋāϞāĻŋāϜ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻāϟāĻŋ āϏāĻŽā§āĻ­āĻŦāϤ āϏāĻžāϧāĻžāϰāĻŖ 2.4 āĻāϰ āĻšā§‡āϝāĻŧ⧇ āφāϰāĻ“ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻāĻŦāĻ‚ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āĻļāĻžāĻ–āĻž master. āĻāĻŦāĻ‚ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻŋ āφāĻŽāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻŦāĻžāĻ—āϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ¨ā§āϝāĻžāĻ¯ā§āϝ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰ⧇āĻ›āĻŋ, āϤāĻžāχ āφāĻŽāĻžāϰ āĻ…āĻ¨ā§āϝ āĻ•āĻžāϰ⧋āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχāĨ¤ āϝ⧇ āϏāĻŽā§āĻ­āĻŦāϤ āĻāϟāĻž āĻĒāϰāĻŋāĻŖāϤ āĻ•āĻŋāĻ­āĻžāĻŦ⧇. āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āĻžāύ⧇ āĻŦāĻŋāώāϝāĻŧ āĻšāϞ: QEMU āĻ¸ā§āĻĨāĻŋāϰ āĻĨāĻžāϕ⧇ āύāĻž, āĻāĻŦāĻ‚ āĻāĻ• āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āϤāĻžāϰāĻž āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āϕ⧋āĻĄā§‡āϰ 10 āĻļāϤāĻžāĻ‚āĻļ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāύ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰ⧇āĻ›āĻŋāϞ⧎ "āĻšā§āϝāĻžāρ, āĻāĻ–āύ āφāĻŽāĻŋ āĻšāĻŋāĻŽāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāϤ⧇ āϝāĻžāĻšā§āĻ›āĻŋ," āφāĻŽāĻŋ āĻ­āĻžāĻŦāϞāĻžāĻŽ āĻāĻŦāĻ‚ āϭ⧇āϙ⧇ āĻĒāĻĄāĻŧāϞāĻžāĻŽā§ˇ āĻāĻ–āĻžāύ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇: QEMU.js-āĻāϰ āĻāĻ•āĻ•-āĻĨā§āϰ⧇āĻĄ āĻĒā§āϰāĻ•ā§ƒāϤāĻŋāϰ āĻ•āĻžāϰāϪ⧇ āĻāĻŦāĻ‚ āφāϏāϞ QEMU āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻĨā§āϰ⧇āĻĄāĻŋāĻ‚āϝāĻŧ⧇āϰ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤāĻŋāϕ⧇ āĻŦā§‹āĻāĻžāϝāĻŧ āύāĻž (āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻāĻ•āχ āϏāĻžāĻĨ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻšā§€āύ āϕ⧋āĻĄ āĻĒāĻžāĻĨ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž, āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁ "āϏāĻŽāĻ¸ā§āϤ āĻ•āĻžāĻ°ā§āύ⧇āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ") āύāϝāĻŧ, āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ, āĻĨā§āϰ⧇āĻĄāϗ⧁āϞāĻŋāϰ āĻĒā§āϰāϧāĻžāύ āĻ•āĻžāϜāϗ⧁āϞāĻŋ āĻŦāĻžāχāϰ⧇ āĻĨ⧇āϕ⧇ āĻ•āϞ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāϕ⧇ "āĻāϟāĻŋ āϚāĻžāϞ⧁" āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻāϟāĻŋ āĻāĻ•āĻ¤ā§āϰ⧀āĻ•āϰāϪ⧇āϰ āϏāĻŽāϝāĻŧ āĻ•āĻŋāϛ⧁ āĻĒā§āϰāĻžāĻ•ā§ƒāϤāĻŋāĻ• āϏāĻŽāĻ¸ā§āϝāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋāϞāĨ¤ āϤāĻŦ⧇ āĻļāĻžāĻ–āĻž āĻĨ⧇āϕ⧇ āĻ•āĻŋāϛ⧁ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āφāύāĻžāϰ āϘāϟāύāĻžāĻ“ āϘāĻŸā§‡āϛ⧇ master, āϝāĻžāϰ āϏāĻžāĻĨ⧇ āφāĻŽāĻŋ āφāĻŽāĻžāϰ āϕ⧋āĻĄ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇āĻ›āĻŋ, āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϰāĻŋāϞāĻŋāĻœā§‡ (āĻāĻŦāĻ‚ āϤāĻžāχ āφāĻŽāĻžāϰ āĻļāĻžāĻ–āĻžāϝāĻŧ) āĻšā§‡āϰāĻŋāĻ“ āĻŦāĻžāĻ›āĻžāχ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āϏāĻŽā§āĻ­āĻŦāϤ āϏ⧁āĻŦāĻŋāϧāĻž āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϤ āύāĻžāĨ¤

āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, āφāĻŽāĻŋ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ āϝ⧇ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒāϟāĻŋ āĻĢ⧇āϞ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž, āĻ…āĻ‚āĻļāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋāϕ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāĻž āĻāĻŦāĻ‚ āύāϤ⧁āύ āĻ•āĻŋāϛ⧁āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻ¸ā§āĻ•ā§āĻ°ā§āϝāĻžāϚ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻ–āύāĻ“ āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻāĻŦāĻ‚ āĻāĻ–āύ āĻĨ⧇āϕ⧇ master.

āϭ⧁āϞ āύāĻŽā§āĻŦāϰ āĻĻ⧁āχ: TLP āĻĒāĻĻā§āϧāϤāĻŋ

āϏāĻ‚āĻ•ā§āώ⧇āĻĒ⧇, āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϭ⧁āϞ āύāϝāĻŧ, āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, āĻāϟāĻŋ "āϕ⧋āĻĨāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāϰāĻžāύ⧋ āϝāĻžāϝāĻŧ?" āĻāĻŦāĻ‚ āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇ "āφāĻŽāϰāĻž āĻ•āĻŋ āϏ⧇āĻ–āĻžāύ⧇ āϝāĻžāĻŦ?" āωāĻ­āϝāĻŧ⧇āϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϭ⧁āϞ āĻŦā§‹āĻāĻžāĻŦ⧁āĻāĻŋāϰ āĻļāĻ°ā§āϤ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻāĻ•āϟāĻŋ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻŽāĻžāĻ¤ā§āϰāĨ¤ āĻāχ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āφāύāĻžāĻĄāĻŧāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻāĻ•āϟāĻŋ āĻ¨ā§āϝāĻžāϝāĻŧāϏāĻ™ā§āĻ—āϤ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ›āĻŋāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁, āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇āχ, āφāĻŽāĻŋ āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ•āϰāϤ⧇ āϚāĻžāχāύāĻŋāĨ¤ āĻāχāĻŦāĻžāϰ āφāĻŽāĻŋ āĻŦ⧁āĻĻā§āϧāĻŋāĻŽāĻžāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻāϟāĻŋ āĻ•āϰāϤ⧇ āĻšā§‡āϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ: āĻĒāĻžāϰāĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻ•āĻŽāĻŋāϟ, āϏāĻšā§‡āϤāύ āϕ⧋āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ (āĻāĻŦāĻ‚ "āĻāϟāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ (āϏāϤāĻ°ā§āĻ•āϤāĻž āϏāĻš) āĻ°ā§āϝāĻžāĻ¨ā§āĻĄāĻŽ āĻ…āĻ•ā§āώāϰāϕ⧇ āĻāĻ•āĻ¤ā§āϰ⧇ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻ•āϰāĻž āύāϝāĻŧ", āϝ⧇āĻŽāύāϟāĻŋ āϞāĻŋāύāĻžāϏ āϟāϰāĻ­āĻžāĻ˛ā§āĻĄāϏ āĻāĻ•āĻŦāĻžāϰ āωāχāĻ•āĻŋāϕ⧋āϟ āĻ…āύ⧁āϏāĻžāϰ⧇ āĻ•āĻžāϰāĻ“ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦāϞ⧇āĻ›āĻŋāϞ⧇āύ) āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤

āϭ⧁āϞ āύāĻŽā§āĻŦāϰ āϤāĻŋāύ: āĻĢā§‹āĻ°ā§āĻĄ āύāĻž āĻœā§‡āύ⧇ āϜāϞ⧇ āύāĻžāĻŽāĻž

āφāĻŽāĻŋ āĻāĻ–āύāĻ“ āĻāϟāĻŋ āĻĨ⧇āϕ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āĻĒāϰāĻŋāĻ¤ā§āϰāĻžāĻŖ āĻĒāĻžāχāύāĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āύ āφāĻŽāĻŋ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ āϝ⧇ āĻ¨ā§āϝ⧂āύāϤāĻŽ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ⧇āϰ āĻĒāĻĨ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŦ āύāĻž, āĻāĻŦāĻ‚ āĻāϟāĻŋ "āĻŦāĻĄāĻŧ āĻšāĻ“āϝāĻŧāĻžāϰ āωāĻĒāĻžāϝāĻŧ" āĻ•āϰāĻŦ, āϝāĻĨāĻž, āĻ¸ā§āĻ•ā§āĻ°ā§āϝāĻžāϚ āĻĨ⧇āϕ⧇ āφāĻŽāĻžāϰ TCG āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āϞāĻŋāĻ–āĻŦ, āϝāĻžāϤ⧇ āύāĻž āĻšāϝāĻŧ āĻĒāϰ⧇ āĻŦāϞāϤ⧇ āĻšāĻŦ⧇, "āĻšā§āϝāĻžāρ, āĻāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ, āϧ⧀āϰ⧇ āϧ⧀āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāĻŋ āϏāĻŦāĻ•āĻŋāϛ⧁ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āύāĻž - āĻāĻ­āĻžāĻŦ⧇āχ TCI āϞ⧇āĻ–āĻž āĻšāϝāĻŧ..." āĻ…āϧāĻŋāĻ•āĻ¨ā§āϤ⧁, āĻāϟāĻŋ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āĻŽāϤ⧋ āĻŽāύ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāĻŋ. āϝ⧇āĻŽāύ āϤāĻžāϰāĻž āĻŦāϞ⧇, “āĻ˜ā§‡āĻ¨ā§āϟ āϜāĻĄāĻŧā§‹ āĻšāϝāĻŧ⧇āĻ›ā§‡Ņƒ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧇āϟāĻž āύāϝāĻŧ”: āϕ⧋āĻĄāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ āĻŦāĻžāχāύāĻžāϰāĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āϏāĻšāϜāĻ­āĻžāĻŦ⧇ āĻāϤ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āύāĻž - āĻāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻ•āϞāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āĻĒ⧁āĻļ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āϝāĻžāϰ āĻĢāϞ⧇ JS āĻŦāĻŋāĻļā§āĻŦ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦāĻ¸ā§āϤ⧁, āϝāĻž āĻāĻ–āύāĻ“ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤ āϕ⧋āĻĨāĻžāĻ“ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āϏāĻžāϧāĻžāϰāĻŖ RISC āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ⧇, āϝāϤāĻĻā§‚āϰ āφāĻŽāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŋ, āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻšāϞ āĻĒ⧁āύāϰ⧁āĻ¤ā§āĻĒāĻžāĻĻāĻŋāϤ āϕ⧋āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻ•ā§āϝāĻžāĻļ⧇ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āϰāĻŋāϏ⧇āϟ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ - āϝāĻĻāĻŋ āĻāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύāĻž āĻšāϝāĻŧ, āϤāĻŦ⧇, āϝ⧇āϕ⧋āύ⧋ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻāϟāĻŋ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋāĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āφāĻŽāĻžāϰ āĻļ⧇āώ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻĨ⧇āϕ⧇, āφāĻŽāĻŋ āĻļāĻŋāϖ⧇āĻ›āĻŋ āϝ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖāϟāĻŋ āĻ…āύ⧁āĻŦāĻžāĻĻ āĻŦā§āϞāϕ⧇āϰ āĻŽāĻžāĻāĻ–āĻžāύ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻŦāϞ⧇ āĻŽāύ⧇ āĻšāĻšā§āϛ⧇ āύāĻž, āϤāĻžāχ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻ¤ā§āϝāĻŋāχ āϕ⧋āύ⧋ āĻ…āĻĢāϏ⧇āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āĻŦāĻžāχāϟāϕ⧋āĻĄā§‡āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻāϟāĻŋ āϟāĻŋāĻŦāĻŋ-āϤ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻĨ⧇āϕ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ .

āϤāĻžāϰāĻž āĻāϏ⧇ āϞāĻžāĻĨāĻŋ āĻŽāĻžāϰāϞ

āϝāĻĻāĻŋāĻ“ āφāĻŽāĻŋ āϜ⧁āϞāĻžāχ āĻŽāĻžāϏ⧇ āϕ⧋āĻĄāϟāĻŋ āφāĻŦāĻžāϰ āϞāĻŋāĻ–āϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻŋ, āĻāĻ•āϟāĻŋ āĻŽā§āϝāĻžāϜāĻŋāĻ• āĻ•āĻŋāĻ• āĻ…āϞāĻ•ā§āĻˇā§āϝ⧇ āϤ⧈āϰāĻŋ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ: āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āϚāĻŋāĻ āĻŋāϗ⧁āϞāĻŋ āχāĻ¸ā§āϝ⧁ āĻāĻŦāĻ‚ āĻĒ⧁āϞ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦāĻŋāĻœā§āĻžāĻĒā§āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āφāϏ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āĻžāύ⧇, āĻšāĻ āĻžā§Ž āĻĨā§āϰ⧇āĻĄā§‡ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰ⧁āύ āĻāĻ•āϟāĻŋ qemu āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻšāĻŋāϏāĻžāĻŦ⧇ Binaryen āĻĒā§āϰāϏāĻ™ā§āϗ⧇, "āϤāĻŋāύāĻŋ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āĻ•āϰ⧇āĻ›āĻŋāϞ⧇āύ, āĻšāϝāĻŧāϤ⧋ āϤāĻŋāύāĻŋ āĻ•āĻŋāϛ⧁ āĻŦāϞāĻŦ⧇āύāĨ¤" āφāĻŽāϰāĻž Emscripten āĻāϰ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻ›āĻŋāϞāĻžāĻŽ āĻŦāĻžāχāύāĻžāϰāĻŋāύ WASM JIT āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇āĨ¤ āĻ āĻŋāĻ• āφāϛ⧇, āφāĻŽāĻŋ āĻŦāϞ⧇āĻ›āĻŋāϞāĻžāĻŽ āϝ⧇ āφāĻĒāύāĻžāϰ āϏ⧇āĻ–āĻžāύ⧇ Apache 2.0 āϞāĻžāχāϏ⧇āĻ¨ā§āϏ āφāϛ⧇, āĻāĻŦāĻ‚ QEMU āϏāĻžāĻŽāĻ—ā§āϰāĻŋāĻ•āĻ­āĻžāĻŦ⧇ GPLv2 āĻāϰ āĻ…āϧ⧀āύ⧇ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻāĻŦāĻ‚ āϤāĻžāϰāĻž āϖ⧁āĻŦ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āύāϝāĻŧāĨ¤ āĻšāĻ āĻžā§Ž āĻĻ⧇āĻ–āĻž āϗ⧇āϞ āϞāĻžāχāϏ⧇āĻ¨ā§āϏ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻāϟāĻž āĻāĻ•āϰāĻ•āĻŽ āĻ āĻŋāĻ• āĻ•āϰ⧁āύ (āφāĻŽāĻŋ āϜāĻžāύāĻŋ āύāĻž: āĻšāϝāĻŧāϤ⧋ āĻāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ, āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻĻā§āĻŦ⧈āϤ āϞāĻžāχāϏ⧇āĻ¨ā§āϏāĻŋāĻ‚, āĻšāϝāĻŧāϤ⧋ āĻ…āĻ¨ā§āϝ āĻ•āĻŋāϛ⧁...)āĨ¤ āĻāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ āφāĻŽāĻžāϕ⧇ āϖ⧁āĻļāĻŋ āĻ•āϰ⧇āϛ⧇, āĻ•āĻžāϰāĻŖ āϤāϤāĻ•ā§āώāϪ⧇ āφāĻŽāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āϘāύāĻŋāĻˇā§āĻ āĻ­āĻžāĻŦ⧇ āĻĻ⧇āϖ⧇āĻ›āĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ WebAssembly, āĻāĻŦāĻ‚ āφāĻŽāĻŋ āĻāĻ•āϰāĻ•āĻŽ āĻĻ⧁: āĻ–āĻŋāϤ āĻāĻŦāĻ‚ āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻ›āĻŋāϞ. āĻāĻ•āϟāĻŋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāĻ“ āĻ›āĻŋāϞ āϝāĻž āĻŸā§āϰāĻžāύāϜāĻŋāĻļāύ āĻ—ā§āϰāĻžāĻĢ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻŽā§ŒāϞāĻŋāĻ• āĻŦā§āϞāĻ•āϗ⧁āϞāĻŋāϕ⧇ āĻ—ā§āϰāĻžāϏ āĻ•āϰāĻŦ⧇, āĻŦāĻžāχāϟāϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āĻāĻŽāύāĻ•āĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧇ āĻĻā§‹āĻ­āĻžāώ⧀āϤ⧇ āύāĻŋāĻœā§‡āχ āϚāĻžāϞāĻžāĻŦ⧇āĨ¤

āϤāĻžāϰāĻĒāϰ āφāϰ⧋ āĻ›āĻŋāϞ āĻāĻ•āϟāĻŋ āϚāĻŋāĻ āĻŋ QEMU āĻŽā§‡āϞāĻŋāĻ‚ āϞāĻŋāĻ¸ā§āĻŸā§‡, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āĻāχ āĻĒā§āϰāĻļā§āύ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ, "āϝāĻžāχāĻšā§‹āĻ• āĻāϟāĻŋ āĻ•āĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ?" āĻāĻŦāĻ‚ āĻāϟāĻž āĻ•āϰāĻž āĻšāϝāĻŧ āĻšāĻ āĻžā§Ž, āĻāϟāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ›āĻŋāϞ āĻĒāϰāĻŋāĻŖāϤ. āĻ¨ā§āϝ⧂āύāϤāĻŽ, āφāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻžāϗ⧁āϞāĻŋ āĻāĻ•āϏāĻžāĻĨ⧇ āĻ¸ā§āĻ•ā§āĻ°ā§āϝāĻžāĻĒ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝāĻĻāĻŋ āĻāϟāĻŋ āĻ•āĻŽāĻŦ⧇āĻļāĻŋ āĻĻā§āϰ⧁āϤ āĻ•āĻžāϜ āĻ•āϰ⧇:

  • āϕ⧋āύ⧋ āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻļāĻŋāĻ•ā§āώāĻžāĻŽā§‚āϞāĻ• āĻ•āĻŋāϛ⧁ āϚāĻžāϞ⧁ āĻ•āϰāĻž
  • āφāχāĻ“āĻāϏ-āĻ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞāĻžāχāĻœā§‡āĻļāύ, āϝ⧇āĻ–āĻžāύ⧇ āϗ⧁āϜāĻŦ āĻ…āύ⧁āϏāĻžāϰ⧇, āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϝāĻž āĻĢā§āϞāĻžāχāϤ⧇ āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āĻļāύ āĻ•āϰāĻžāϰ āĻ…āϧāĻŋāĻ•āĻžāϰ āϰāĻžāϖ⧇ āϤāĻž āĻšāϞ āĻāĻ•āϟāĻŋ āĻœā§‡āĻāϏ āχāĻžā§āϜāĻŋāύ (āĻāϟāĻŋ āĻ•āĻŋ āϏāĻ¤ā§āϝ?)
  • āĻŽāĻŋāύāĻŋ-āĻ“āĻāϏ-āĻāϰ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ - āĻāĻ•āĻ•-āĻĢā§āϞāĻĒāĻŋ, āĻ…āĻ¨ā§āϤāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻŋāϤ, āϏāĻŦ āϧāϰāϪ⧇āϰ āĻĢāĻžāĻ°ā§āĻŽāĻ“āϝāĻŧā§āϝāĻžāϰ, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ...

āĻŦā§āϰāĻžāωāϜāĻžāϰ āϰāĻžāύāϟāĻžāχāĻŽ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ

āφāĻŽāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻŦāϞ⧇āĻ›āĻŋ, QEMU āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĨā§āϰ⧇āĻĄāĻŋāĻ‚āϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āφāĻŦāĻĻā§āϧ, āϤāĻŦ⧇ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āĻāϟāĻŋ āύ⧇āχāĨ¤ āĻ āĻŋāĻ• āφāϛ⧇, āϝ⧇, āύāĻž... āĻĒā§āϰāĻĨāĻŽā§‡ āĻāϟāĻŋ āĻāϕ⧇āĻŦāĻžāϰ⧇āχ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ›āĻŋāϞ āύāĻž, āϤāĻžāϰāĻĒāϰ⧇ āĻ“āϝāĻŧ⧇āĻŦāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻžāϰāϰāĻž āĻšāĻžāϜāĻŋāϰ - āϝāϤāĻĻā§‚āϰ āφāĻŽāĻŋ āĻŦ⧁āĻāĻŋ, āĻāϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒāĻžāϏ āĻ•āϰāĻžāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĨā§āϰ⧇āĻĄāĻŋāĻ‚ āĻ­āĻžāĻ— āĻ•āϰāĻž āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻ›āĻžāĻĄāĻŧāĻž. āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇āχ, āĻ­āĻžāĻ— āĻ•āϰāĻž āĻŽā§‡āĻŽāϰāĻŋ āĻŽāĻĄā§‡āϞ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āϕ⧋āĻĄ āĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝ āϏāĻŽāĻ¸ā§āϝāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ āϤāĻžāϰāĻĒāϰ āϜāύāĻ—āϪ⧇āϰ āϚāĻžāĻĒ⧇ āύāĻžāĻŽā§‡ āϤāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύāĻ“ āĻ•āϰāĻž āĻšāϝāĻŧ SharedArrayBuffers. āĻāϟāĻŋ āϧ⧀āϰ⧇ āϧ⧀āϰ⧇ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āϤāĻžāϰāĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āĻāϰ āĻĒā§āϰāĻŦāĻ°ā§āϤāύ āωāĻĻāϝāĻžāĻĒāύ āĻ•āϰ⧇āĻ›āĻŋāϞ, āϤāĻžāϰāĻĒāϰ⧇ āϤāĻžāϰāĻž āύāĻŦāĻŦāĻ°ā§āώ āωāĻĻāϝāĻžāĻĒāύ āĻ•āϰ⧇āĻ›āĻŋāϞ, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻŽā§‡āĻ˛ā§āϟāĻĄāĻžāωāύ... āϝāĻžāϰ āĻĒāϰ⧇ āϤāĻžāϰāĻž āĻāχ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ⧇ āĻĒ⧌āρāϛ⧇āĻ›āĻŋāϞ āϝ⧇ āϏāĻŽāϝāĻŧ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻŽā§‹āϟāĻž āĻŦāĻž āĻŽā§‹āϟāĻž, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ­āĻžāĻ— āĻ•āϰāĻž āĻ¸ā§āĻŽā§ƒāϤāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻĨā§āϰ⧇āĻĄ āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰ āĻŦ⧃āĻĻā§āϧāĻŋ, āĻāϟāĻž āϏāĻŦ āĻāĻ•āχ āĻāϟāĻŋ āĻŦ⧇āĻļ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇. āϤāĻžāχ āφāĻŽāϰāĻž āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āĻŽā§‡āĻŽāϰāĻŋāϰ āϏāĻžāĻĨ⧇ āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĨā§āϰ⧇āĻĄāĻŋāĻ‚ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻŽāύ⧇ āĻšāĻšā§āϛ⧇ āϤāĻžāϰāĻž āĻĒāϰ⧇ āĻāϟāĻŋāϕ⧇ āφāĻŦāĻžāϰ āϚāĻžāϞ⧁ āĻ•āϰ⧇āϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁, āĻĒā§āϰāĻĨāĻŽ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻĨ⧇āϕ⧇ āĻāϟāĻŋ āĻ¸ā§āĻĒāĻˇā§āϟ āĻšāϝāĻŧ⧇ āϗ⧇āϛ⧇, āĻāϟāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āĻœā§€āĻŦāύ āφāϛ⧇ āĻāĻŦāĻ‚ āϝāĻĻāĻŋ āϤāĻžāχ āĻšāϝāĻŧ, āφāĻŽāϰāĻž āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĨā§āϰ⧇āĻĄāĻŋāĻ‚āϝāĻŧ⧇āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āύāĻž āĻ•āϰ⧇ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻŦāĨ¤

āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϟāĻŋ āĻšāϞ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āϏāĻžāĻĨ⧇ āύāĻŋāĻŽā§āύ-āĻ¸ā§āϤāϰ⧇āϰ āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āĻļāύ⧇āϰ āĻ…āϏāĻŽā§āĻ­āĻŦāϤāĻž: āφāĻĒāύāĻŋ āϏāĻšāϜāĻ­āĻžāĻŦ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž, āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻĒā§āϰāϏāĻ™ā§āĻ— āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύāϟāĻŋāϤ⧇ āĻ¸ā§āϝ⧁āχāϚ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤ āĻ•āϞ āĻ¸ā§āĻŸā§āϝāĻžāĻ• JS āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ āĻĻā§āĻŦāĻžāϰāĻž āĻĒāϰāĻŋāϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧāĨ¤ āĻŽāύ⧇ āĻšāĻŦ⧇, āϏāĻŽāĻ¸ā§āϝāĻž āϕ⧀, āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāϰāĻž āĻāĻ–āύāĻ“ āĻĒā§‚āĻ°ā§āĻŦ⧇āϰ āĻĒā§āϰāĻŦāĻžāĻšāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ? āφāϏāϞ āĻŦāĻŋāώāϝāĻŧāϟāĻŋ āĻšāϞ āϝ⧇ QEMU-āϤ⧇ āĻŦā§āϞāĻ• I/O āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ āϕ⧋āϰ⧋āϟāĻŋāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡, āĻāĻŦāĻ‚ āĻāĻ–āĻžāύ⧇āχ āύāĻŋāĻŽā§āύ-āĻ¸ā§āϤāϰ⧇āϰ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āĻļāύāϗ⧁āϞāĻŋ āĻ•āĻžāĻœā§‡ āφāϏāĻŦ⧇āĨ¤ āϏ⧌āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ, Emscipten-āĻ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻ…ā§āϝāĻžāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏ āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϰāϝāĻŧ⧇āϛ⧇, āĻāĻŽāύāĻ•āĻŋ āĻĻ⧁āϟāĻŋ: āĻ…ā§āϝāĻžāϏāĻŋāύāϏāĻŋāĻĢāĻžāχ и āĻ…āύ⧁āĻŦāĻžāĻĻāĻ•. āĻĒā§āϰāĻĨāĻŽāϟāĻŋ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϕ⧋āĻĄā§‡ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝ āĻŦā§āϞ⧋āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āφāϰ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āύāϝāĻŧāĨ¤ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϟāĻŋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ "āϏāĻ āĻŋāĻ• āωāĻĒāĻžāϝāĻŧ" āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻĻā§‹āĻ­āĻžāώ⧀āϰ āϜāĻ¨ā§āϝ āĻŦāĻžāχāϟāϕ⧋āĻĄ āĻĒā§āϰāϜāĻ¨ā§āĻŽā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ āϧ⧀āϰ⧇ āϧ⧀āϰ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āϤāĻŦ⧇ āĻāϟāĻŋ āϕ⧋āĻĄāϟāĻŋ āĻĢā§‹āϞāĻžāĻŦ⧇ āύāĻžāĨ¤ āϏāĻ¤ā§āϝ, āĻāχ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽā§‡āϰ āϜāĻ¨ā§āϝ āϕ⧋āϰ⧋āϟāĻŋāύāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ°ā§āĻĨāύ āĻ¸ā§āĻŦāĻžāϧ⧀āύāĻ­āĻžāĻŦ⧇ āĻ…āĻŦāĻĻāĻžāύ āϰāĻžāĻ–āϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āĻāĻ–āĻžāύ⧇ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ Asyncify-āĻāϰ āϜāĻ¨ā§āϝ āϕ⧋āϰ⧋āϟāĻŋāύāϗ⧁āϞāĻŋ āϞ⧇āĻ–āĻž āĻ›āĻŋāϞ āĻāĻŦāĻ‚ Emterpreter-āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻžāϝāĻŧ āĻāĻ•āχ API āĻāϰ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ›āĻŋāϞ, āφāĻĒāύāĻžāϕ⧇ āϕ⧇āĻŦāϞ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇)āĨ¤

āĻāχ āĻŽā§āĻšā§āĻ°ā§āϤ⧇, āφāĻŽāĻŋ āĻāĻ–āύāĻ“ āϕ⧋āĻĄāϟāĻŋāϕ⧇ WASM-āĻ āϏāĻ‚āĻ•āϞāĻŋāϤ āĻāĻ•āϟāĻŋāϤ⧇ āĻŦāĻŋāĻ­āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāύāĻŋ āĻāĻŦāĻ‚ Emterpreter āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰ⧇āĻ›āĻŋ, āϤāĻžāχ āĻŦā§āϞāĻ• āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞāĻŋ āĻāĻ–āύāĻ“ āĻ•āĻžāϜ āĻ•āϰ⧇ āύāĻž (āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϏāĻŋāϰāĻŋāĻœā§‡ āĻĻ⧇āϖ⧁āύ, āϝ⧇āĻŽāύ āϤāĻžāϰāĻž āĻŦāϞ⧇...)āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻĒāύāĻžāϰ āĻāχ āĻŽāϜāĻžāϰ āĻ¸ā§āϤāϰāϝ⧁āĻ•ā§āϤ āϜāĻŋāύāĻŋāϏāϟāĻŋāϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁ āĻĒāĻžāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ:

  • āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āĻŦā§āϞāĻ• I/OāĨ¤ āφāĻšā§āĻ›āĻž, āφāĻĒāύāĻŋ āĻ•āĻŋ āϏāĻ¤ā§āϝāĻŋāχ āύ⧇āϟāĻŋāĻ­ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āϏāĻš āĻ…āύ⧁āĻ•āϰāĻŖ āĻ•āϰāĻž NVMe āφāĻļāĻž āĻ•āϰ⧇āĻ›āĻŋāϞ⧇āύ? 🙂
  • āĻ¸ā§āĻĨāĻŋāϰāĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻ•āϞāĻŋāϤ āĻĒā§āϰāϧāĻžāύ QEMU āϕ⧋āĻĄ (āĻ…āύ⧁āĻŦāĻžāĻĻāĻ•, āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ…āύ⧁āĻ•āϰāĻŖ āĻ•āϰāĻž āĻĄāĻŋāĻ­āĻžāχāϏ, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ)
  • āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ•ā§āϝāĻžāϞāĻŋ āϗ⧇āĻ¸ā§āϟ āϕ⧋āĻĄ WASM āĻ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇

QEMU āĻ‰ā§ŽāϏ⧇āϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ

āφāĻĒāύāĻŋ āϏāĻŽā§āĻ­āĻŦāϤ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰ⧇āϛ⧇āύ, āϗ⧇āĻ¸ā§āϟ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āĻ…āύ⧁āĻ•āϰāĻŖ āĻ•āϰāĻžāϰ āϕ⧋āĻĄ āĻāĻŦāĻ‚ āĻšā§‹āĻ¸ā§āϟ āĻŽā§‡āĻļāĻŋāύ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϕ⧋āĻĄ QEMU-āϤ⧇ āφāϞāĻžāĻĻāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇, āĻāϟāĻŋ āĻāĻŽāύāĻ•āĻŋ āĻāĻ•āϟ⧁ āĻ•ā§ŒāĻļāϞ⧀:

  • āϗ⧇āĻ¸ā§āϟ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āφāϛ⧇
  • āĻšāϞ āĻāĻ•ā§āϏāĻŋāϞāĻžāϰ⧇āϟāϰāĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻšāĻžāĻ°ā§āĻĄāĻ“āϝāĻŧā§āϝāĻžāϰ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞāĻžāχāĻœā§‡āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ KVM Linux (āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āϗ⧇āĻ¸ā§āϟ āĻāĻŦāĻ‚ āĻšā§‹āĻ¸ā§āϟ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϜāĻ¨ā§āϝ), āϝ⧇āϕ⧋āύ⧋ āĻ¸ā§āĻĨāĻžāύ⧇ āϜāĻžāĻ¸ā§āϟ-āχāύ-āϟāĻžāχāĻŽ āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ TCGāĨ¤ QEMU 2.9 āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇, HAXM āĻšāĻžāĻ°ā§āĻĄāĻ“āϝāĻŧā§āϝāĻžāϰ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞāĻžāχāĻœā§‡āĻļāύ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ°ā§āĻĨāύ āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧ Windows (āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ)
  • āϝāĻĻāĻŋ TCG āĻšāĻžāĻ°ā§āĻĄāĻ“āϝāĻŧā§āϝāĻžāϰ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞāĻžāχāĻœā§‡āĻļāύ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻšā§‹āĻ¸ā§āϟ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ⧇āϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āϏāĻžāĻ°ā§āĻŦāϜāύ⧀āύ āĻĻā§‹āĻ­āĻžāώ⧀āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āĻļāύ āϏāĻŽāĻ°ā§āĻĨāύ āϰāϝāĻŧ⧇āϛ⧇āĨ¤
  • ... āĻāĻŦāĻ‚ āĻāχ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻŋāϛ⧁āϰ āϚāĻžāϰāĻĒāĻžāĻļ⧇ - āĻ…āύ⧁āĻ•āϰāĻŖ āĻ•āϰāĻž āĻĒ⧇āϰāĻŋāĻĢ⧇āϰāĻžāϞ, āχāωāϜāĻžāϰ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ, āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ, āϰ⧇āĻ•āĻ°ā§āĻĄ-āϰāĻŋāĻĒā§āϞ⧇ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤

āϝāĻžāχāĻšā§‹āĻ•, āφāĻĒāύāĻŋ āĻ•āĻŋ āϜāĻžāύ⧇āύ: QEMU āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰāχ āύāϝāĻŧ, āĻšā§‹āĻ¸ā§āϟ āĻ•āĻžāĻ°ā§āύ⧇āϞ⧇ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϏ⧇āϏāϰāϕ⧇āĻ“ āĻ…āύ⧁āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦāĻžāχāύāĻžāϰāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰ⧇āϰ āϜāĻ¨ā§āϝ AFL fuzzer āĻĻā§āĻŦāĻžāϰāĻžāĨ¤ āϏāĻŽā§āĻ­āĻŦāϤ āϕ⧇āω JS āĻĨ⧇āϕ⧇ QEMU āĻāϰ āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āĻāχ āĻŽā§‹āĻĄāϟāĻŋ āĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϤ⧇ āϚāĻžāύ? 😉

āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻĻā§€āĻ°ā§āϘāĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ⧇āϰ āĻŽāϤ⧋, QEMU āĻ•āϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ configure и make. āϧāϰāĻž āϝāĻžāĻ• āφāĻĒāύāĻŋ āĻ•āĻŋāϛ⧁ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āϛ⧇āύ: āĻāĻ•āϟāĻŋ TCG āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ, āĻĨā§āϰ⧇āĻĄ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ, āĻ…āĻ¨ā§āϝ āĻ•āĻŋāϛ⧁āĨ¤ āĻ…āĻŸā§‹āĻ•āύāĻĢ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āϗ⧇āϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻžāϝāĻŧ āϖ⧁āĻļāĻŋ/āĻ­āϝāĻŧāĻ™ā§āĻ•āĻŋāϤ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āϤāĻžāĻĄāĻŧāĻžāĻšā§āĻĄāĻŧā§‹ āĻ•āϰāĻŦ⧇āύ āύāĻž (āϝāĻĨāĻžāϝāĻĨāĻ­āĻžāĻŦ⧇ āφāĻ¨ā§āĻĄāĻžāϰāϞāĻžāχāύ āĻ•āϰ⧁āύ) - āφāϏāϞ⧇, configure QEMU āĻāϰ āĻĻ⧃āĻļā§āϝāϤ āĻ¸ā§āĻŦ-āϞāĻŋāĻ–āĻŋāϤ āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ āĻĨ⧇āϕ⧇ āωāĻ¤ā§āĻĒāĻ¨ā§āύ āĻšāϝāĻŧ āύāĻžāĨ¤

WebAssembly

āϤāĻžāĻšāϞ⧇ āĻāχ āϜāĻŋāύāĻŋāϏāϟāĻŋāϕ⧇ WebAssembly (āĻ“āϰāĻĢ⧇ WASM) āĻŦāϞāĻž āĻšāϝāĻŧ āĻ•āĻŋ? āĻāϟāĻŋ Asm.js-āĻāϰ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ, āφāϰ āĻŦ⧈āϧ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϕ⧋āĻĄ āĻšāĻ“āϝāĻŧāĻžāϰ āĻ­āĻžāύ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻŦāĻŋāĻĒāϰ⧀āϤ⧇, āĻāϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻāĻŦāĻ‚ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻāĻŦāĻ‚ āĻāĻŽāύāĻ•āĻŋ āĻāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻž āϞ⧇āĻ–āĻž āϖ⧁āĻŦ āϏāĻšāϜ āύāϝāĻŧ: āĻ•āĻŽā§āĻĒā§āϝāĻžāĻ•ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ, āĻāϟāĻŋ āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāϞāχāĻŦāĻŋ 128.

āφāĻĒāύāĻŋ āĻšāϝāĻŧāϤ⧋ Asm.js-āĻāϰ āϰāĻŋāϞ⧁āĻĒāĻŋāĻ‚ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻļ⧁āύ⧇āϛ⧇āύ - āĻāϟāĻŋ āĻšāϞ "āωāĻšā§āϚ-āĻ¸ā§āϤāϰ⧇āϰ" āĻĒā§āϰāĻŦāĻžāĻš āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀āϰ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ (āĻ…āĻ°ā§āĻĨāĻžā§Ž āϝāĻĻāĻŋ-āϤāĻžāĻšāϞ⧇-āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ, āϞ⧁āĻĒ, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ), āϝāĻžāϰ āϜāĻ¨ā§āϝ JS āχāĻžā§āϜāĻŋāύāϗ⧁āϞāĻŋ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻĨ⧇āϕ⧇ āύāĻŋāĻŽā§āύ-āĻ¸ā§āϤāϰ⧇āϰ LLVM IR, āĻĒā§āϰāϏ⧇āϏāϰ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻ°ā§āĻŦāĻžāĻšāĻŋāϤ āĻŽā§‡āĻļāĻŋāύ āϕ⧋āĻĄā§‡āϰ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋāĨ¤ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇āχ, QEMU āĻāϰ āĻŽāĻ§ā§āϝāĻŦāĻ°ā§āϤ⧀ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϟāĻŋāϰ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋāĨ¤ āĻŽāύ⧇ āĻšāĻŦ⧇ āĻāĻ–āĻžāύ⧇āχ, āĻŦāĻžāχāϟāϕ⧋āĻĄ, āϝāĻ¨ā§āĻ¤ā§āϰāĻŖāĻžāϰ āϏāĻŽāĻžāĻĒā§āϤāĻŋ... āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻŦā§āϞāĻ• āφāϛ⧇, āϝāĻĻāĻŋ-āϤāĻžāĻšāϞ⧇-āĻ…āĻ¨ā§āϝāĻĻāĻŋāϕ⧇ āĻāĻŦāĻ‚ āϞ⧁āĻĒ!..

āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻ…āĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ•āĻžāϰāĻŖ āϕ⧇āύ āĻŦāĻžāχāύāĻžāϰāĻŋāύ āĻĻāϰāĻ•āĻžāϰ⧀: āĻāϟāĻŋ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇āχ āωāĻšā§āϚ-āĻ¸ā§āϤāϰ⧇āϰ āĻŦā§āϞāĻ•āϗ⧁āϞāĻŋāϕ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻž WASM-āĻ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āĻŽā§ŒāϞāĻŋāĻ• āĻŦā§āϞāϕ⧇āϰ āĻāĻ•āϟāĻŋ āĻ—ā§āϰāĻžāĻĢ āĻĨ⧇āϕ⧇ āϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ āĻŋāĻ• āφāϛ⧇, āφāĻŽāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻŦāϞ⧇āĻ›āĻŋ āϝ⧇ āĻāϟāĻŋ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• C/C++ API āĻāϰ āĻĒāĻŋāĻ›āύ⧇ WebAssembly āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧇āĨ¤

TCG (āĻ•ā§āώ⧁āĻĻā§āϰ āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟāϰ)

āϟāĻŋāϏāĻŋāϜāĻŋ āĻŽā§‚āϞāϤ āĻ›āĻŋāϞ C āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄāĨ¤ āϤāĻžāϰāĻĒāϰ, āĻĻ⧃āĻļā§āϝāϤ, āĻāϟāĻŋ GCC-āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāϤāĻŋāĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦāĻŋāϤāĻž āϏāĻšā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻāϟāĻŋ āĻšā§‹āĻ¸ā§āϟ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āϜāĻ¨ā§āϝ āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āĻļāύ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ āĻšāĻŋāϏāĻžāĻŦ⧇ QEMU-āϤ⧇ āϤāĻžāϰ āĻ¸ā§āĻĨāĻžāύ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϝāĻŧ⧇āϛ⧇āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻāĻ•āϟāĻŋ TCG āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻŽā§‚āĻ°ā§āϤ āĻŦāĻžāχāϟāϕ⧋āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰ⧇, āϝāĻž āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āĻĻā§‹āĻ­āĻžāώ⧀ āĻĻā§āĻŦāĻžāϰāĻž āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāĻŋ āĻāχ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻĄāĻŧāĻžāϤ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āϏāĻ¤ā§āϝ āϝ⧇ QEMU āϤ⧇ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ‰ā§ŽāĻĒāĻ¨ā§āύ āϟāĻŋāĻŦāĻŋāϤ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ tcg_qemu_tb_exec, āĻāϟāĻž āφāĻŽāĻžāϰ āϜāĻ¨ā§āϝ āϖ⧁āĻŦ āĻĻāϰāĻ•āĻžāϰ⧀ āĻšāϤ⧇ āĻĒāϰāĻŋāĻŖāϤ.

QEMU-āϤ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ TCG āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āϝ⧋āĻ— āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻŦāĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ 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 āϤ⧇āĻ“, āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻŽā§‹āĻŸā§‡āχ āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ āύāϝāĻŧ, āϤāĻŦ⧇ āφāĻŽāĻŋ āϕ⧋āĻĄ āĻŦāĻžāĻĢāĻžāϰ⧇ āĻŽā§‹āĻŸā§‡āĻ“ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āύāϝāĻŧ, āĻŦāĻžāχāύāĻžāϰāĻŋāύ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āĻĻāĻŋāϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻ• āϰāĻžāĻ–āĻŦ, āϤāĻžāχ āφāĻŽāĻŋ āĻŦāϞāĻŦ: 4 āĻŦāĻžāχāϟ
  • āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āϕ⧋āύ āϐāĻšā§āĻ›āĻŋāĻ• āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ - āφāĻŽāϰāĻž āĻŦāĻžāχāύāĻžāϰāĻŋāύ⧇ āϝāĻž āĻĒāĻžāχ āϤāĻž āφāĻŽāϰāĻž āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻŋ, āĻāĻ•ā§āϏāĻŋāϞāĻžāϰ⧇āϟāϰāϕ⧇ āĻŦāĻžāĻ•āĻŋāϗ⧁āϞāĻŋāϕ⧇ āφāϰāĻ“ āϏāĻšāĻœā§‡ āĻ­āĻžāĻ™āϤ⧇ āĻĻāĻŋāύ
  • āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĻā§āĻŦāĻžāϰāĻž āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāĻž TLB āĻ•ā§āϝāĻžāĻļ⧇āϰ āφāύ⧁āĻŽāĻžāύāĻŋāĻ• āφāĻ•āĻžāϰ āĻ•āϤāĨ¤ āφāϏāϞ āĻŦāĻŋāώāϝāĻŧāϟāĻŋ āĻšāϞ āĻ•āĻŋāωāχāĻāĻŽāχāωāϤ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁āχ āϗ⧁āϰ⧁āϤāϰ: āϝāĻĻāĻŋāĻ“ āϏ⧇āĻ–āĻžāύ⧇ āϏāĻšāĻžāϝāĻŧāĻ• āĻĢāĻžāĻ‚āĻļāύ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āϞ⧋āĻĄ/āĻ¸ā§āĻŸā§‹āϰ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇ āϗ⧇āĻ¸ā§āϟ āĻāĻŽāĻāĻŽāχāω (āĻāϟāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āφāĻŽāϰāĻž āĻāĻ–āύ āϕ⧋āĻĨāĻžāϝāĻŧ āĻĨāĻžāĻ•āĻŦ?), āϤāĻžāϰāĻž āϤāĻžāĻĻ⧇āϰ āĻ…āύ⧁āĻŦāĻžāĻĻ āĻ•ā§āϝāĻžāĻļ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āφāĻ•āĻžāϰ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇, āϝāĻžāϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāĻŖ āϏāϰāĻžāϏāϰāĻŋ āϏāĻŽā§āĻĒā§āϰāϚāĻžāϰ āĻŦā§āϞāϕ⧇ āĻāĻŽā§āĻŦ⧇āĻĄ āĻ•āϰāĻž āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ•āĨ¤ āĻĒā§āϰāĻļā§āύ āĻšāϞ, āĻāχ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āϕ⧋āύ āĻ…āĻĢāϏ⧇āϟ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻāĻŦāĻ‚ āĻĻā§āϰ⧁āϤ āĻ•ā§āϰāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻāĻ•ā§āώāϤāĻžāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻž āĻšāϝāĻŧ?
  • āĻāĻ–āĻžāύ⧇ āφāĻĒāύāĻŋ āĻāĻ• āĻŦāĻž āĻĻ⧁āϟāĻŋ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āϰ⧇āϜāĻŋāĻ¸ā§āϟāĻžāϰ⧇āϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϟāĻŋāĻŦāĻŋ āĻ•āϞāĻŋāĻ‚ āϏāĻ•ā§āώāĻŽ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āϐāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āϛ⧋āϟ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ inline-āĻāϰ āĻŽāϤ āĻĢāĻžāĻ‚āĻļāύ flush_icache_range (āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āύāϝāĻŧ)

āĻĢāĻžāχāϞ tcg-target.inc.c, āĻ…āĻŦāĻļā§āϝāχ, āϏāĻžāϧāĻžāϰāĻŖāϤ āφāĻ•āĻžāϰ⧇ āĻ…āύ⧇āĻ• āĻŦāĻĄāĻŧ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻāϤ⧇ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āĻĢāĻžāĻ‚āĻļāύ āĻĨāĻžāϕ⧇:

  • āϕ⧋āύ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϕ⧋āύ āĻ…āĻĒāĻžāϰ⧇āĻ¨ā§āĻĄā§‡ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻžāϰ āωāĻĒāϰ āĻŦāĻŋāϧāĻŋāύāĻŋāώ⧇āϧ āϏāĻš āĻĒā§āϰāĻžāϰāĻŽā§āĻ­āĻŋāĻ•āϤāĻžāĨ¤ āĻ…āĻ¨ā§āϝ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āφāĻŽāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ
  • āĻĢāĻžāĻ‚āĻļāύ āϝāĻž āĻāĻ•āϟāĻŋ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻŦāĻžāχāϟāϕ⧋āĻĄ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āύ⧇āϝāĻŧ
  • āφāĻĒāύāĻŋ āĻāĻ–āĻžāύ⧇ āĻ…āĻ•ā§āϜāĻŋāϞāĻŋāϝāĻŧāĻžāϰ⧀ āĻĢāĻžāĻ‚āĻļāύ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇āĻ“ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ tcg/tcg.c

āύāĻŋāĻœā§‡āϰ āϜāĻ¨ā§āϝ, āφāĻŽāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•ā§ŒāĻļāϞāϟāĻŋ āĻŦ⧇āϛ⧇ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ: āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ…āύ⧁āĻŦāĻžāĻĻ āĻŦā§āϞāϕ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āĻļāĻŦā§āĻĻāϗ⧁āϞāĻŋāϤ⧇, āφāĻŽāĻŋ āϚāĻžāϰāϟāĻŋ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟāĻžāϰ āϞāĻŋāϖ⧇āĻ›āĻŋāϞāĻžāĻŽ: āĻāĻ•āϟāĻŋ āĻļ⧁āϰ⧁ āϚāĻŋāĻšā§āύ (āφāĻļ⧇āĻĒāĻžāĻļ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŽāĻžāύ 0xFFFFFFFF, āϝāĻž āϟāĻŋāĻŦāĻŋ-āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧇), āĻĒā§āϰāϏāĻ™ā§āĻ—, āĻ‰ā§ŽāĻĒāĻ¨ā§āύ āĻŽāĻĄāĻŋāωāϞ āĻāĻŦāĻ‚ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚āϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āĻŽā§āϝāĻžāϜāĻŋāĻ• āύāĻŽā§āĻŦāϰāĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ āϚāĻŋāĻšā§āύ āĻŦāϏāĻžāύ⧋ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ 0xFFFFFFFF - nāϝ⧇āĻ–āĻžāύ⧇ n - āĻāĻ•āϟāĻŋ āϛ⧋āϟ āϧāύāĻžāĻ¤ā§āĻŽāĻ• āϏāĻ‚āĻ–ā§āϝāĻž, āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāϟāĻŋ āĻĻā§‹āĻ­āĻžāώ⧀āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ 1 āĻĻā§āĻŦāĻžāϰāĻž āĻŦ⧃āĻĻā§āϧāĻŋ āĻĒ⧇āϝāĻŧ⧇āϛ⧇āĨ¤ āϝāĻ–āύ āĻāϟāĻŋ āĻĒ⧌āρāϛ⧇āϛ⧇ 0xFFFFFFFE, āϏāĻ‚āĻ•āϞāύ āϘāĻŸā§‡āĻ›āĻŋāϞ, āĻŽāĻĄāĻŋāωāϞāϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŸā§‡āĻŦāĻŋāϞ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻāĻ•āϟāĻŋ āϛ⧋āϟ "āϞāĻžā§āϚāĻžāϰ" āĻ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āϝ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ tcg_qemu_tb_exec, āĻāĻŦāĻ‚ āĻŽāĻĄāĻŋāωāϞāϟāĻŋ QEMU āĻŽā§‡āĻŽāϰāĻŋ āĻĨ⧇āϕ⧇ āϏāϰāĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻ•ā§āϞāĻžāϏāĻŋāĻ•āϗ⧁āϞāĻŋāϕ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, "āĻ•ā§āĻ°ā§āϝāĻžāϚ, āĻĒā§āϰāϜāĻžāϰ⧇āϰ āĻšā§ƒāĻĻāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āĻāχ āĻļāĻŦā§āĻĻ⧇ āĻ•āϤāϟāĻž āϜāĻĄāĻŧāĻŋāϤ..."āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻ¸ā§āĻŽā§ƒāϤāĻŋ āϕ⧋āĻĨāĻžāĻ“ āĻĢ⧁āĻŸā§‹ āĻ›āĻŋāϞ. āϤāĻžāĻ›āĻžāĻĄāĻŧāĻž, āĻāϟāĻŋ QEMU āĻĻā§āĻŦāĻžāϰāĻž āĻĒāϰāĻŋāϚāĻžāϞāĻŋāϤ āĻŽā§‡āĻŽāϰāĻŋ āĻ›āĻŋāϞ! āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ āϕ⧋āĻĄ āĻ›āĻŋāϞ āϝāĻž āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āϞ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧ (āĻ­āĻžāϞ, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻ•āϟāĻŋ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟāĻžāϰ), āϝāĻžāϰ āϞāĻŋāĻ™ā§āĻ•āϟāĻŋ āφāϗ⧇ āĻāχ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻ›āĻŋāϞ āϤāĻžāϕ⧇ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧇āĻ›āĻŋāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āύāĻŋāĨ¤ āφāϏāϞ⧇, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, QEMU āĻ¸ā§āϟāĻžāĻ°ā§āϟāφāĻĒ⧇ āĻŽā§‡āĻŽāϰāĻŋ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϏ⧇āĻ–āĻžāύ⧇ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āϕ⧋āĻĄ āϞāĻŋāϖ⧇āĨ¤ āϝāĻ–āύ āĻŦāĻžāĻĢāĻžāϰ āĻĢ⧁āϰāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āϕ⧋āĻĄāϟāĻŋ āĻĢ⧇āϞ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϟāĻŋ āϤāĻžāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϞāĻŋāĻ–āϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĨ¤

āϕ⧋āĻĄāϟāĻŋ āĻ…āĻ§ā§āϝāϝāĻŧāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āφāĻŽāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āϝ⧇ āĻŽā§āϝāĻžāϜāĻŋāĻ• āύāĻŽā§āĻŦāϰ⧇āϰ āĻ•ā§ŒāĻļāϞāϟāĻŋ āφāĻŽāĻžāϕ⧇ āĻĒā§āϰāĻĨāĻŽ āĻĒāĻžāϏ⧇ āĻāĻ•āϟāĻŋ āĻ…āĻĒā§āϰāϚāϞāĻŋāϤ āĻŦāĻžāĻĢāĻžāϰ⧇ āĻ•āĻŋāϛ⧁ āϭ⧁āϞ āĻŽā§āĻ•ā§āϤ āĻ•āϰ⧇ āĻ—āĻžāĻĻāĻž āĻ§ā§āĻŦāĻ‚āϏ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āύāĻž āĻšāĻ“āϝāĻŧāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϕ⧇ āĻĒāϰ⧇ āφāĻŽāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ āĻŦāĻžāχāĻĒāĻžāϏ āĻŦāĻžāĻĢāĻžāϰ āĻĒ⧁āύāĻ°ā§āϞāĻŋāĻ–āύ? āĻāĻŽāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āύ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€, āϝāĻ–āύ āφāĻŽāĻŋ āĻāĻ•āϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻžāϝāĻŧ āĻĒāĻĄāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ, āφāĻŽāĻŋ āĻĢāϞāĻžāĻĢāϞ āϕ⧋āĻĄāϟāĻŋ āφāĻŦāĻžāϰ āύ⧇āϟāĻŋāĻ­ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇āĻ›āĻŋ, āĻāϟāĻŋāϤ⧇ āĻŽā§‹āϜāĻŋāϞāĻž āϰ⧇āĻ•āĻ°ā§āĻĄ-āϰāĻŋāĻĒā§āϞ⧇ āϏ⧇āϟ āĻ•āϰ⧇āĻ›āĻŋ... āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻŽāĻŋ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āϜāĻŋāύāĻŋāϏ āĻŦ⧁āĻāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ: āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŦā§āϞāϕ⧇āϰ āϜāĻ¨ā§āϝ, āĻ• struct TranslationBlock āĻāϰ āĻŦāĻ°ā§āĻŖāύāĻž āϏāĻšāĨ¤ āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰ⧁āύ āϕ⧋āĻĨāĻžāϝāĻŧ... āĻāϟāĻž āĻ āĻŋāĻ•, āĻŦāĻžāĻĢāĻžāϰ⧇ āĻŦā§āϞāϕ⧇āϰ āĻ āĻŋāĻ• āφāϗ⧇āĨ¤ āĻāϟāĻŋ āωāĻĒāϞāĻŦā§āϧāĻŋ āĻ•āϰ⧇, āφāĻŽāĻŋ āĻ•ā§āϰāĻžāϚ (āĻ…āĻ¨ā§āϤāϤ āĻ•āĻŋāϛ⧁) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āϕ⧇āĻŦāϞ āĻŽā§āϝāĻžāϜāĻŋāĻ• āύāĻŽā§āĻŦāϰāϟāĻŋ āĻĢ⧇āϞ⧇ āĻĻāĻŋāϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ āĻāĻŦāĻ‚ āĻ…āĻŦāĻļāĻŋāĻˇā§āϟ āĻļāĻŦā§āĻĻāϗ⧁āϞāĻŋāϕ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ struct TranslationBlock, āĻāĻ•āϟāĻŋ āĻāĻ•āĻ•āĻ­āĻžāĻŦ⧇ āϞāĻŋāĻ™ā§āĻ•āϝ⧁āĻ•ā§āϤ āϤāĻžāϞāĻŋāĻ•āĻž āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϝāĻž āĻ…āύ⧁āĻŦāĻžāĻĻ āĻ•ā§āϝāĻžāĻļ⧇ āϰāĻŋāϏ⧇āϟ āĻšāϞ⧇ āĻĻā§āϰ⧁āϤ āĻ…āϤāĻŋāĻ•ā§āϰāĻŽ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āĻŽā§‡āĻŽāϰāĻŋ āĻ–āĻžāϞāĻŋ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

āĻ•āĻŋāϛ⧁ āĻ•ā§āϰāĻžāϚ āϰāϝāĻŧ⧇ āϗ⧇āϛ⧇: āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϕ⧋āĻĄ āĻŦāĻžāĻĢāĻžāϰ⧇ āϚāĻŋāĻšā§āύāĻŋāϤ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟāĻžāϰ - āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āĻŋāϛ⧁ āϏāĻšāϜ BinaryenExpressionRef, āĻ…āĻ°ā§āĻĨāĻžā§Ž, āϤāĻžāϰāĻž āϝ⧇ āĻ…āĻ­āĻŋāĻŦā§āϝāĻ•ā§āϤāĻŋāϗ⧁āϞāĻŋāϕ⧇ āϰ⧈āĻ–āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āĻŦ⧇āϏāĻŋāĻ• āĻŦā§āϞāϕ⧇ āϰāĻžāĻ–āĻž āĻĻāϰāĻ•āĻžāϰ āϤāĻž āĻĻ⧇āϖ⧇, āĻ…āĻ‚āĻļāϟāĻŋ āĻšāϞ BB āϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ⧇āϰ āĻļāĻ°ā§āϤ, āĻ…āĻ‚āĻļāϟāĻŋ āϕ⧋āĻĨāĻžāϝāĻŧ āϝ⧇āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻ āĻŋāĻ• āφāϛ⧇, āϰāĻŋāϞ⧋āĻĒāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻŦā§āϞāĻ• āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻļāĻ°ā§āϤ āĻ…āύ⧁āϏāĻžāϰ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰāĨ¤ āϤāĻžāĻĻ⧇āϰ āφāϞāĻžāĻĻāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻ…āύ⧁āĻŽāĻžāύāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ āϝ⧇ āϏ⧇āϗ⧁āϞāĻŋ āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ āϚāĻžāϰāϟāĻŋ āĻŦāĻžāχāϟ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ, āϤāĻžāχ āφāĻĒāύāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āϞ⧇āĻŦ⧇āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝ āĻĻ⧁āϟāĻŋ āĻŦāĻŋāϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āĻāϟāĻŋ āϏāϰāĻžāϤ⧇ āĻŽāύ⧇ āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, TCG āϞ⧁āĻĒ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻ¸ā§āĻĨāĻžāύ āĻ•āϰāĻžāϰ āĻ•āĻžāϰāĻŖ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰāϤ⧇ āĻāχ āϧāϰāύ⧇āϰ āϞ⧇āĻŦ⧇āϞāϗ⧁āϞāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ QEMU-āϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

Binaryen āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇

WebAssembly-āĻāϰ āĻŽāĻĄāĻŋāωāϞāϗ⧁āϞāĻŋāϤ⧇ āĻĢāĻžāĻ‚āĻļāύ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻĄāĻŋ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻž āĻāĻ•āϟāĻŋ āĻ…āĻ­āĻŋāĻŦā§āϝāĻ•ā§āϤāĻŋāĨ¤ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύāϗ⧁āϞāĻŋ āĻšāϞ āχāωāύāĻžāϰ⧀ āĻāĻŦāĻ‚ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ…āĻĒāĻžāϰ⧇āĻļāύ, āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ⧇āϰ āϤāĻžāϞāĻŋāĻ•āĻž, āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒā§āϰāĻŦāĻžāĻš āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āϏāĻŽāĻ¨ā§āĻŦāϝāĻŧ⧇ āĻ—āĻ āĻŋāϤ āĻŦā§āϞāĻ•āĨ¤ āφāĻŽāĻŋ āφāϗ⧇āχ āĻŦāϞ⧇āĻ›āĻŋ, āĻāĻ–āĻžāύ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒā§āϰāĻŦāĻžāĻš āωāĻšā§āϚ-āĻ¸ā§āϤāϰ⧇āϰ āĻļāĻžāĻ–āĻž, āϞ⧁āĻĒ, āĻĢāĻžāĻ‚āĻļāύ āĻ•āϞ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āĻŽāϤ⧋ āϏ⧁āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āϏāĻ‚āĻ—āĻ āĻŋāϤ āĻšāϝāĻŧāĨ¤ āĻĢāĻžāĻ‚āĻļāύ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āωāĻĒāϰ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ āύāĻž, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇, āĻ āĻŋāĻ• JS āĻŽāϤ. āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āφāϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāĻŋ āϏ⧇āϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋāύāĻŋ, āϤāĻžāχ āφāĻŽāĻŋ āφāĻĒāύāĻžāϕ⧇ āϏ⧇āϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦāϞāĻŦ āύāĻžāĨ¤

āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϰ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāĻ“ āϰāϝāĻŧ⧇āϛ⧇, āĻļā§‚āĻ¨ā§āϝ āĻĨ⧇āϕ⧇ āϏāĻ‚āĻ–ā§āϝāĻžāϝ⧁āĻ•ā§āϤ, āĻĒā§āϰāĻ•āĻžāϰ⧇āϰ: int32 / int64 / float / doubleāĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻĒā§āϰāĻĨāĻŽ n āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻšāϞ āĻĢāĻžāĻ‚āĻļāύ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟāĨ¤ āĻ…āύ⧁āĻ—ā§āϰāĻš āĻ•āϰ⧇ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āϝāĻĻāĻŋāĻ“ āĻāĻ–āĻžāύ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āύāĻŋāĻŽā§āύ-āĻ¸ā§āϤāϰ⧇āϰ āύāϝāĻŧ, āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞāĻŋ āĻāĻ–āύāĻ“ "āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰāĻŋāϤ/āφāύāϏāĻžāχāύāĻĄ" āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻŦāĻšāύ āĻ•āϰ⧇ āύāĻž: āϏāĻ‚āĻ–ā§āϝāĻžāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āφāϚāϰāĻŖ āĻ•āϰ⧇ āϤāĻž āĻ…āĻĒāĻžāϰ⧇āĻļāύ āϕ⧋āĻĄā§‡āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤

āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇ āĻŦāϞāϤ⧇ āϗ⧇āϞ⧇, Binaryen āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ āϏāĻžāϧāĻžāϰāĻŖ āϏāĻŋ-āĻāĻĒāĻŋāφāχ: āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻŽāĻĄāĻŋāωāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ, āϤāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ - āχāωāύāĻžāϰ⧀, āĻŦāĻžāχāύāĻžāϰāĻŋ, āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ āĻĨ⧇āϕ⧇ āĻŦā§āϞāĻ•, āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒā§āϰāĻŦāĻžāĻš āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝāĻžāϰ āĻļāϰ⧀āϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻ…āĻ­āĻŋāĻŦā§āϝāĻ•ā§āϤāĻŋāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ, āφāĻŽāĻžāϰ āĻŽāϤ⧋, āĻāĻ•āϟāĻŋ āύāĻŋāĻŽā§āύ-āĻ¸ā§āϤāϰ⧇āϰ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ—ā§āϰāĻžāĻĢ āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āϰāĻŋāϞ⧋āĻĒāĻžāϰ āωāĻĒāĻžāĻĻāĻžāύ āφāĻĒāύāĻžāϕ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇āĨ¤ āϝāϤāĻĻā§‚āϰ āφāĻŽāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŋ, āĻāĻ•āϟāĻŋ āĻŦā§āϞāϕ⧇ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ āĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āωāĻšā§āϚ-āĻ¸ā§āϤāϰ⧇āϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ, āϝāϤāĻ•ā§āώāĻŖ āύāĻž āĻāϟāĻŋ āĻŦā§āϞāϕ⧇āϰ āϏ⧀āĻŽāĻžāύāĻžāϰ āĻŦāĻžāχāϰ⧇ āύāĻž āϝāĻžāϝāĻŧ - āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻĻā§āϰ⧁āϤ āĻĒāĻžāĻĨ / āϧ⧀āϰ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻŦāĻŋāĻ˛ā§āϟ-āχāύ TLB āĻ•ā§āϝāĻžāĻļ⧇ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āϕ⧋āĻĄā§‡āϰ āĻ­āĻŋāϤāϰ⧇ āĻĒāĻžāĻĨ āĻŦā§āϰāĻžāĻžā§āϚāĻŋāĻ‚, āĻ•āĻŋāĻ¨ā§āϤ⧁ "āĻŦāĻžāĻšā§āϝāĻŋāĻ•" āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒā§āϰāĻŦāĻžāĻšā§‡ āĻšāĻ¸ā§āϤāĻ•ā§āώ⧇āĻĒ āύāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝāĨ¤ āφāĻĒāύāĻŋ āϝāĻ–āύ āĻāĻ•āϟāĻŋ āϰāĻŋāϞ⧋āĻĒāĻžāϰāϕ⧇ āĻŽā§āĻ•ā§āϤ āĻ•āϰ⧇āύ, āϤāĻ–āύ āĻāϰ āĻŦā§āϞāĻ•āϗ⧁āϞāĻŋ āĻŽā§āĻ•ā§āϤ āĻšāϝāĻŧ; āϝāĻ–āύ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻŽāĻĄāĻŋāωāϞ āĻŽā§āĻ•ā§āϤ āĻ•āϰ⧇āύ, āϤāĻ–āύ āĻāϟāĻŋāϤ⧇ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻž āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ, āĻĢāĻžāĻ‚āĻļāύ āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻ…āĻĻ⧃āĻļā§āϝ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ āφāĻ–āĻĄāĻŧāĻž.

āϝāĻžāχāĻšā§‹āĻ•, āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻĻā§‹āĻ­āĻžāώ⧀āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻ›āĻžāĻĄāĻŧāĻžāχ āĻĢā§āϞāĻžāχāϤ⧇ āϕ⧋āĻĄ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ āĻāχ āϝ⧁āĻ•ā§āϤāĻŋāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ C++ āĻĢāĻžāχāϞ⧇ āϰāĻžāĻ–āĻž āĻāĻŦāĻ‚ āϏ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ C++ API āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻž, āϰ⧇āĻĄāĻŋ- āϤ⧈āϰāĻŋ āĻŽā§‹āĻĄāĻŧāĻ•

āϤāĻžāχ āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāϤ⧇

// ĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ĐŗĐģОйаĐģҌĐŊŅ‹Đĩ ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ (ĐŧĐžĐļĐŊĐž ĐŋĐžĐŧĐĩĐŊŅŅ‚ŅŒ ĐŋĐžŅ‚ĐžĐŧ)
BinaryenSetAPITracing(0);

BinaryenSetOptimizeLevel(3);
BinaryenSetShrinkLevel(2);

// ŅĐžĐˇĐ´Đ°Ņ‚ŅŒ ĐŧĐžĐ´ŅƒĐģҌ
BinaryenModuleRef MODULE = BinaryenModuleCreate();

// ĐžĐŋĐ¸ŅĐ°Ņ‚ŅŒ Ņ‚Đ¸ĐŋŅ‹ Ņ„ŅƒĐŊĐēŅ†Đ¸Đš (ĐēаĐē ŅĐžĐˇĐ´Đ°Đ˛Đ°ĐĩĐŧҋ҅, Ņ‚Đ°Đē и Đ˛Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩĐŧҋ҅)
helper_type  BinaryenAddFunctionType(MODULE, "helper-func", BinaryenTypeInt32(), int32_helper_args, ARRAY_SIZE(int32_helper_args));
// (int23_helper_args ĐŋŅ€Đ¸ĐžĐą^WŅĐžĐˇĐ´Đ°ŅŽŅ‚ŅŅ ĐžŅ‚Đ´ĐĩĐģҌĐŊĐž)

// ҁĐēĐžĐŊŅŅ‚Ņ€ŅƒĐ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ҁ҃ĐŋĐĩŅ€-ĐŧĐĩĐŗĐ° Đ˛Ņ‹Ņ€Đ°ĐļĐĩĐŊиĐĩ
// ... ĐŊ҃ Ņ‚ŅƒŅ‚ ҃Đļ Đ˛Ņ‹ ĐēаĐē-ĐŊĐ¸ĐąŅƒĐ´ŅŒ ŅĐ°Đŧи :)

// ĐŋĐžŅ‚ĐžĐŧ ŅĐžĐˇĐ´Đ°Ņ‚ŅŒ Ņ„ŅƒĐŊĐēŅ†Đ¸ŅŽ
BinaryenAddFunction(MODULE, "tb_fun", tb_func_type, func_locals, FUNC_LOCALS_COUNT, expr);
BinaryenAddFunctionExport(MODULE, "tb_fun", "tb_fun");
...
BinaryenSetMemory(MODULE, (1 << 15) - 1, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
BinaryenAddMemoryImport(MODULE, NULL, "env", "memory", 0);
BinaryenAddTableImport(MODULE, NULL, "env", "tb_funcs");

// СаĐŋŅ€ĐžŅĐ¸Ņ‚ŅŒ ваĐģĐ¸Đ´Đ°Ņ†Đ¸ŅŽ и ĐžĐŋŅ‚Đ¸ĐŧĐ¸ĐˇĐ°Ņ†Đ¸ŅŽ ĐŋŅ€Đ¸ ĐļĐĩĐģаĐŊии
assert (BinaryenModuleValidate(MODULE));
BinaryenModuleOptimize(MODULE);

... āϝāĻĻāĻŋ āφāĻŽāĻŋ āĻ•āĻŋāϛ⧁ āϭ⧁āϞ⧇ āĻ—āĻŋāϝāĻŧ⧇ āĻĨāĻžāĻ•āĻŋ, āĻĻ⧁āσāĻ–āĻŋāϤ, āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ¸ā§āϕ⧇āϞ⧇āϰ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāĻ¤ā§āĻŦ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻŦāĻ‚ āĻŦāĻŋāĻŦāϰāĻŖ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāĻŦāĻ‚ āĻāĻ–āύ āĻ•ā§āĻ°ā§āϝāĻžāĻ•-āĻĢ⧇āĻ•ā§āϏ-āĻĒ⧇āĻ•ā§āϏ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ, āĻāϰāĻ•āĻŽ āĻ•āĻŋāϛ⧁:

static char buf[1 << 20];
BinaryenModuleOptimize(MODULE);
BinaryenSetMemory(MODULE, 0, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
int sz = BinaryenModuleWrite(MODULE, buf, sizeof(buf));
BinaryenModuleDispose(MODULE);
EM_ASM({
  var module = new WebAssembly.Module(new Uint8Array(wasmMemory.buffer, $0, $1));
  var fptr = $2;
  var instance = new WebAssembly.Instance(module, {
      'env': {
          'memory': wasmMemory,
          // ...
      }
  );
  // и Đ˛ĐžŅ‚ ҃ĐļĐĩ ҃ Đ˛Đ°Ņ ĐĩŅŅ‚ŅŒ instance!
}, buf, sz);

āĻ•āĻŋāωāχāĻāĻŽāχāω āĻāĻŦāĻ‚ āĻœā§‡āĻāϏ-āĻāϰ āĻŦāĻŋāĻļā§āĻŦāϗ⧁āϞāĻŋāϕ⧇ āϕ⧋āύ⧋āĻ­āĻžāĻŦ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻŦāĻ‚ āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇ āϏāĻ‚āĻ•āϞāĻŋāϤ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋ āĻĻā§āϰ⧁āϤ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āϞāĻžā§āϚāĻžāϰ⧇ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ), āĻāĻŦāĻ‚ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋ āϏ⧇āĻ–āĻžāύ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻĻā§āϰ⧁āϤ āϏ⧂āϚāĻ•āϟāĻŋ āĻ—āĻŖāύāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻļā§‚āĻ¨ā§āϝ āĻļāĻŦā§āĻĻ āĻ…āύ⧁āĻŦāĻžāĻĻ āĻŦā§āϞāϕ⧇āϰ āϏ⧂āĻšā§€āϟāĻŋ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻžāϰāĻĒāϰ⧇ āĻāχ āϏ⧂āĻ¤ā§āϰāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ—āĻŖāύāĻž āĻ•āϰāĻž āϏ⧂āϚāĻ•āϟāĻŋ āϕ⧇āĻŦāϞ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĢāĻŋāϟ āĻšāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ struct TranslationBlock.

āωāĻĒāĻžāϝāĻŧ āĻĻā§āĻŦāĻžāϰāĻž, āĻĄā§‡āĻŽā§‹ (āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āĻāĻ•āϟāĻŋ āĻ…āĻ¸ā§āĻĒāĻˇā§āϟ āϞāĻžāχāϏ⧇āĻ¨ā§āϏ āϏāĻš) āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻĢāĻ•ā§āϏ⧇ āĻ­āĻžāϞ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻ•ā§āϰ⧋āĻŽ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻ›āĻŋāϞ⧇āύ āϕ⧋āύ⧋āĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āύāϝāĻŧ āϝ⧇ āϕ⧇āω WebAssembly āĻŽāĻĄāĻŋāωāϞāϗ⧁āϞāĻŋāϰ āĻāĻ• āĻšāĻžāϜāĻžāϰ⧇āϰāĻ“ āĻŦ⧇āĻļāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϚāĻžāχāĻŦ⧇, āϤāĻžāχ āϤāĻžāϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻ āĻŋāĻ•āĻžāύāĻžāϰ āĻ¸ā§āĻĨāĻžāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻ—āĻŋāĻ—āĻžāĻŦāĻžāχāϟ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰ⧇āϛ⧇...

āĻāĻ–āύ āĻ āĻĒāĻ°ā§āϝāĻ¨ā§āϤāχ. āϕ⧇āω āφāĻ—ā§āϰāĻšā§€ āĻšāϞ⧇ āϏāĻŽā§āĻ­āĻŦāϤ āĻ…āĻ¨ā§āϝ āύāĻŋāĻŦāĻ¨ā§āϧ āĻšāĻŦ⧇. āϝāĻĨāĻž, āĻ…āĻ¨ā§āϤāϤ āĻ…āĻŦāĻļ⧇āώ āĻŽāĻžāĻ¤ā§āϰ āĻŦā§āϞāĻ• āĻĄāĻŋāĻ­āĻžāχāϏ āĻ•āĻžāϜ āĻ•āϰ⧇. āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻŋ āĻŽāĻĄāĻŋāωāϞāϗ⧁āϞāĻŋāϰ āϏāĻ‚āĻ•āϞāύāϕ⧇ āĻ…ā§āϝāĻžāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏ āĻ•āϰāĻžāĻ“ āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āϝ⧇āĻŽāύāϟāĻŋ āĻœā§‡āĻāϏ āĻŦāĻŋāĻļā§āĻŦ⧇ āĻĒā§āϰāĻĨāĻžāĻ—āϤ, āϝ⧇āĻšā§‡āϤ⧁ āĻāĻ–āύāĻ“ āĻāĻ•āϟāĻŋ āĻĻā§‹āĻ­āĻžāώ⧀ āϰāϝāĻŧ⧇āϛ⧇ āϝ⧇āϟāĻŋ āύ⧇āϟāĻŋāĻ­ āĻŽāĻĄāĻŋāωāϞ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻāχ āϏāĻŽāĻ¸ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ…āĻŦāĻļ⧇āώ⧇ āĻāĻ•āϟāĻŋ āϧāĻžāρāϧāĻž: āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ 32-āĻŦāĻŋāϟ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āϏāĻ‚āĻ•āϞāύ āĻ•āϰ⧇āϛ⧇āύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϕ⧋āĻĄāϟāĻŋ, āĻŽā§‡āĻŽāϰāĻŋ āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡, āĻŦāĻžāχāύāĻžāϰāĻŋāύ āĻĨ⧇āϕ⧇, āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇āϰ āϕ⧋āĻĨāĻžāĻ“ āĻŦāĻž 2-āĻŦāĻŋāϟ āĻ āĻŋāĻ•āĻžāύāĻž āĻ¸ā§āĻĨāĻžāύ⧇āϰ āωāĻĒāϰ⧇āϰ 32 āĻ—āĻŋāĻ—āĻžāĻŦāĻžāχāĻŸā§‡āϰ āĻ…āĻ¨ā§āϝ āϕ⧋āĻĨāĻžāĻ“ āωāϠ⧇ āϝāĻžāϝāĻŧāĨ¤ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ āϝ⧇ āĻŦāĻžāχāύāĻžāϰāĻŋāύ⧇āϰ āĻĻ⧃āĻˇā§āϟāĻŋāϕ⧋āĻŖ āĻĨ⧇āϕ⧇ āĻāϟāĻŋ āϖ⧁āĻŦ āĻŦāĻĄāĻŧ āĻāĻ•āϟāĻŋ āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ āĻ āĻŋāĻ•āĻžāύāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϛ⧇āĨ¤ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāχ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ āĻĒ⧇āϤ⧇?

āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ⧇āϰ āĻĒāĻĨ⧇

āφāĻŽāĻŋ āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻāϟāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŋāύāĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āϚāĻŋāĻ¨ā§āϤāĻž āĻ›āĻŋāϞ, "āϝāĻĻāĻŋ āφāĻŽāĻŋ ā§Šā§¨-āĻŦāĻŋāϟ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻŋ?" LinuxāĻāϰāĻĒāϰ āĻ…ā§āϝāĻžāĻĄā§āϰ⧇āϏ āĻ¸ā§āĻĒ⧇āϏ⧇āϰ āωāĻĒāϰ⧇āϰ āĻ…āĻ‚āĻļāϟāĻŋ āĻ•āĻžāĻ°ā§āύ⧇āϞ āĻĻāĻ–āϞ āĻ•āϰāĻŦ⧇āĨ¤ āĻĒā§āϰāĻļā§āύ āĻļ⧁āϧ⧁ āĻāĻ•āϟāĻžāχ, āĻāϰ āĻ•āϤāϟāĻž āĻ…āĻ‚āĻļ āĻĻāĻ–āϞ āĻ•āϰāĻž āĻšāĻŦ⧇: ā§§ āϜāĻŋāĻŦāĻŋ āύāĻžāĻ•āĻŋ ⧍ āϜāĻŋāĻŦāĻŋāĨ¤

āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻžāϰ⧇āϰ āωāĻĒāĻžāϝāĻŧ⧇ (āĻ…āύ⧁āĻļā§€āϞāύāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ)

āĻ āĻŋāĻ•āĻžāύāĻž āĻ¸ā§āĻĨāĻžāύ⧇āϰ āĻļā§€āĻ°ā§āώ⧇ āĻāĻ•āϟāĻŋ āĻŦ⧁āĻĻāĻŦ⧁āĻĻ āĻĢ⧁āρāĻ•āĻžāύ⧋ āϝāĻžāĻ•āĨ¤ āφāĻŽāĻŋ āύāĻŋāĻœā§‡āχ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻ›āĻŋ āύāĻž āϕ⧇āύ āĻāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇ - āϏ⧇āĻ–āĻžāύ⧇ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ "āφāĻŽāϰāĻž āĻ…āύ⧁āĻļā§€āϞāύāĻ•āĻžāϰ⧀: āϏāĻŦāĻ•āĻŋāϛ⧁ āφāĻŽāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻ•āĻžāϜ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϕ⧇āω āϜāĻžāύ⧇ āύāĻž āϕ⧇āύ..."

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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster