แแ แแฎแแ แแแกแแ แแแแแ แแแแแแฌแงแแแขแ แแแแแขแแแชแแ แแ แแชแแกแแก แจแแฅแชแแแแแแแ แแ แแกแฌแแแแแ แ แแแแ แจแแฅแแแแ JavaScript (แฃแคแ แ แแฃแกแขแแ, Asm.js) แแแแฅแแแแก แแแแแแแ. แแฅแกแแแ แแแแแขแแกแแแแก QEMU แแแ แฉแแแก แแ แ แแแแแแแแ แฎแแแก แจแแแแแ Habr-แแ แแแแฌแแ แ แกแขแแขแแ. แแแแแแขแแ แแแจแ แแแ แฉแแแก แแ แแแฅแขแแก แแแแแแแแแแ WebAssembly-แจแ แแ แแแแแช แแแแแขแแแแแแแ แแแแฅแแแก แแแกแ แฃแแแแฃแแแ แ แแขแแแฆแแช แแ แแแแแแแ แแ แแแฅแขแ... แแฃแจแแแแ แแแแแแแ, แแแแ แแ แซแแแแแ แแแแ แแ แแฎแแ, แแฎแแแฎแแแก แแแแแฉแแแ แแก แกแขแแขแแ
แแแแชแแแแแ
แแแแแแแแ แแ แฃแแแ แแแกแฌแแแแ, แ แแแแ แแ โแ แแแแ แแโ แแแแแขแแแ QEMU JavaScript-แแ, แแแฏแแ แแ แแแแแแฌแงแแแขแ แแก แแแแแแ แฃแแแ แแแแแแแแแแแแ แแ แซแแแแ แจแแชแแแแแแ แแ แแแแแแแแ แแแแแ.
แจแแชแแแแ แแแแแ แ แแแ แแแแ: แแแแจแขแแแแ แฌแแ แขแแแแแแ แแแแแจแแแแแแแ
แฉแแแ แแแ แแแแ แจแแชแแแแ แแงแ แฉแแแ แแแ แกแแแก 2.4.1-แแก แแแแแ แ แแแ แกแแแแแ แแแแแจแแ. แแแจแแ แแแ แแ แแแแ แแแแแฉแแแแ: แแฃ แฌแแ แขแแแแก แแแแแจแแแแ แแ แกแแแแแก, แแแจแแ แแก แแแแแ แฃแคแ แ แกแขแแแแแฃแ แแ, แแแแ แ แแแ แขแแแ 2.4 แแ แแแ แฃแแแขแแก, แคแแแแแแ master
. แแ แ แแแแแ แแแแแแแแแ แกแแแฃแแแ แ แจแแชแแแแแแแก แกแแแแแแ แแแแ แ แแแแแแแแแก แแแแแขแแแแก, แกแฎแแแกแ แกแแแ แแแ แแ แแญแแ แแแแแแ. แแแแแ แแกแ แแแแแแแแ. แแแแ แแ แแฅ แแ แแก แกแแฅแแ: QEMU แแ แแแแก แแ แ แแฆแแช แแแแแแขแจแ แแแแแแชแฎแแแแก แแแแแ แแ แแแฃแแ แแแแแก 10 แแ แแชแแแขแแ แแแขแแแแแแชแแแช แแ.โแฐแ, แแฎแแ แแแงแแแแแก แแแแแ แแโ แแแแแคแแฅแ แ แแ แแแแคแฃแญแแ. แแฅ แฉแแแ แแแญแแ แแแแ แแแแ แแกแแแก แแแแแแแแ: QEMU.js-แแก แแ แแแแแแแแแแ แแฃแแแแแก แแแแ แแ แแ แคแแฅแขแแก แแแแ, แ แแ แแ แแแแแแแฃแ แ QEMU แแ แแฃแแแกแฎแแแแก แแ แแแแ แซแแคแแแแก แแ แแ แกแแแแแแก (แแแฃ แ แแแแแแแแ แแแฃแแแแจแแ แแแแแ แแแแแก แแแแแแแก แแ แแแ แแฃแแแ แแฃแจแแแแแก แฃแแแ แก, แแ แแ แ แแฎแแแแ "แแแแแแงแแแ แงแแแแ แแแ แแแ") แแ แแก แแแกแแแแก แแแแแแฌแงแแแขแ แแแแจแแแแแแแ, แซแแคแแแแก แซแแ แแแแแ แคแฃแแฅแชแแแแ แฃแแแ แแแแแแแขแแแ, แ แแ แจแแแแซแแ แแแ แแแแ แแแแแซแแฎแแแ. แแแแ แจแแฅแแแ แแฃแแแแ แแแ แแ แแแแแแแแ แจแแ แฌแงแแแก แแ แแก. แแฃแแชแ, แแก แคแแฅแขแ, แ แแ แแแแแแ แแ แชแแแแแแแ แคแแแแแแแแแ master
, แ แแแแแแแแแช แแชแแแแแแแ แฉแแแ แแแแแก แจแแ แฌแงแแแก, แแกแแแ แแแฃแแแแก แแ แฉแแแ แแฃแแฅแขแแก แแแแแจแแแแแจแ (แแ, แจแแกแแแแแแกแแ, แฉแแแก แคแแแแแแจแ) แแกแแแ, แแแแแ, แแ แแฅแแแแแแ แแแแแขแแแฃแแ แแแฎแแ แฎแแแฃแแแแ.
แแแแแแแ, แแ แแแแแแฌแงแแแขแ, แ แแ แฏแแ แแแแแ แแแ แ แแฅแแก แแ แแขแแขแแแแก แแแแแแแแแแก, แแแกแ แแแฌแแแแแแกแแแแก แแแจแแแก แแ แแฎแแแ แแแ แกแแแก แแจแแแแแแก แแฃแแแแแ, แ แแช แแแคแฃแซแแแแฃแแแ แฃแคแ แ แแฎแแแแ แแ แแฎแแ master
.
แจแแชแแแแ แแแแแ แ แแแแ แ: TLP แแแแแแแแแแแ
แแ แกแแแแแแ, แแก แแ แแ แแก แจแแชแแแแ, แแแแแแแ, แแก แแ แแก แแฎแแแแ แแ แแแฅแขแแก แจแแฅแแแแก แแแฎแแกแแแแแแแแ แกแ แฃแแ แแแฃแแแแ แแแแก แแแ แแแแแจแ, แ แแแแ แช โแกแแ แแ แ แแแแ แแแแแแแแแ?โ แแ แแแแแแแ โแแแแแฆแฌแแแ? แแ แแแ แแแแแจแ แแแฃแฎแแ แฎแแแแแ แแ แแแ แแแแ แแแ แแแแแ แแแแแฃแแ แแแ แแแแขแ แแงแ, แแแแ แแ, แแฃแแแแ แแแแ, แแ แแแแแแแ แแแแก แแแแแแขแแ แแแแแแ แแแ. แแแฏแแ แแ แแแแแแแ แแแแแแแแแแแแ แแก แแแแแแ แฃแแแ: แแขแแแฃแ แ แแแแแแแฃแแแแแแ, แชแแแแแแ แ แแแแแก แชแแแแแแแแแ (แแ แแ แ โแจแแแแฎแแแแแแ แกแแแแแแแแแแก แจแแแ แแแ, แกแแแแ แแ แจแแแแแแแแ แแฅแแแแ (แแแคแ แแฎแแแแแแแแ)โ, แ แแแแ แช แแ แแฎแแ แแแแฃแก แขแแ แแแแแกแแ แแฅแแ แแแแแแแ, แแแแแชแแขแแขแแก แแแฎแแแแแ) แแ แ.แจ.
แจแแชแแแแ แแแแแ แ แแแกแแแ: แฌแงแแแจแ แฉแแกแแแ แคแแ แแแก แชแแแแแก แแแ แแจแ
แแ แฏแแ แแแแแ แแ แแแแแจแแ แแแแ แแก แแแแแแแแ, แแแแ แแ แแฎแแ แแแแแแฌแงแแแขแ แแ แแแแงแแแแแ แฃแแชแแ แแกแ แฌแแแแแฆแแแแแแแแก แแแแก แแ แแแแแแแแ แแก โแแแแ แแแแ แแแแโ, แแแ แซแแ, แแแแฌแแ แ แฉแแแ TCG backend แแฃแแแแแ, แ แแแ แแ แ แแ แแแแแแแแแแแ แฃแแแ แแฅแแ: "แแแแฎ, แแก, แ แ แแฅแแ แฃแแแ, แแแแ, แแแแ แแ แแ แแแ แแแแแแขแ แแแแ แงแแแแแคแแ แก - แแกแ แฌแแ แแ TCI..." แฃแคแ แ แแแขแแช, แแก แแแแแแแ แแจแแแ แ แแแแแกแแแแแแ แฉแแแแ, แแแแแแแแ แแ แแฅแแแ แแ แแแแ แแแแก. แ แแแแ แช แแแแแแแ, โแแแแขแ แจแแแแ แแแั, แแแแ แแ แแ แ แแกโ: แแแแ, แ แ แแฅแแ แฃแแแ, แแ แแแแแแ, แแแแ แแ แแแกแแ แแแแขแ แแแ แแ แจแแแซแแแแ แฃแแ แแแแ แแแแแแชแแก - แแก แแแ แแแแแ แแ แแฃแแแ แจแ แฃแแแ แแแแแแขแแแแก แแแแแแแแชแแแกแแแแก, แ แแก แจแแแแแแแแช แแแแฆแแแ แแแ แแแแฃแแ แแแแแฅแขแ JS แกแแแงแแ แแแแ, แ แแแแแกแแช แฏแแ แแแแแ แกแญแแ แแแแ แกแแแแ แแแแแ แฉแแแ. แแฃแแชแ, แแแ แแแแฃแ RISC แแ แฅแแขแแฅแขแฃแ แแแแ, แ แแแแแแแแแช แแ แแแกแแแก, แขแแแแฃแ แ แกแแขแฃแแชแแแ แแแกแขแ แฃแฅแชแแแก แฅแแจแแก แแแแคแแแ แแแแแขแแแ แแแ แ แแแแแแ แแ แแแฃแแ แแแแแกแแแแก - แแฃ แแก แแ แแ แแก แแก, แ แแช แฉแแแ แแแญแแ แแแแ, แแแจแแ, แแแแแกแแแแ แจแแแแฎแแแแแจแ, แแก แแฎแแแกแแ. แแแ แแ แแแแกแ, แฉแแแ แแแแ แแชแแแแแแแแแ แแแแแแ, แ แแ แแแแขแ แแแ, แ แแแแ แช แฉแแแก, แแ แแ แแก แแแแแชแแแฃแแ แแแ แแแแแแก แแแแแแก แจแฃแแจแ, แแกแ แ แแ, แฉแแแ แแแแแแแแแ แแ แแแญแแ แแแแ แแแแขแแแแแ แแแขแแ แแ แแขแแ แแแฃแแ แแแแแกแแแแ แ แแคแกแแขแฃแ แแแแ, แแ แฉแแแ แจแแแแแซแแแ แแแกแ แแแแแ แแ แแแ แฃแแ แแแแ แขแฃแแแ แแฃแแแแแก แคแฃแแฅแชแแแแแ. .
แแแแแแแแ แแ แแแแ แขแงแแก
แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแแแแก แแแแแฌแแ แ แแแแแฌแงแ แฏแแ แแแแแ แแแแแกแจแ, แฏแแแแกแแฃแ แ แแแ แขแงแแ แจแแฃแแฉแแแแแแ แแแฉแแแ: แฉแแแฃแแแแ แแ, แฌแแ แแแแแ GitHub-แแแ แแแแแก แ แแแแ แช แจแแขแงแแแแแแแแแ Issues แแ Pull แแแแฎแแแแแแแก แแแกแฃแฎแแแแก แจแแกแแฎแแ, แแแแ แแ แแฅ, แแแฃแแแแแแแแ แฎแกแแแแแ แแแแแจแ
แแแ แ แแแแแ แแงแ
- แ แแแแ แกแแแแแแแแแแแแแแ แแแจแแแแ แงแแแแแแแแ แ แแแกแขแแแแชแแแก แแแ แแจแ
- แแแ แขแฃแแแแแแชแแ iOS-แแ, แกแแแแช, แญแแ แแแแก แแแแแฎแแแ, แแ แแแแแ แแ แแแแแแแชแแ, แ แแแแแกแแช แแฅแแก แแแแแก แแแแแ แแ แแแแก แฃแคแแแแ, แแ แแก JS แซแ แแแ (แแก แแแ แแแแแ?)
- แแแแ แแแแ แแชแแฃแแ แกแแกแขแแแแก แแแแแแกแขแ แแ แแแ - แแ แแฏแแ แแแ แคแแแแ, แฉแแจแแแแแฃแแ, แงแแแแ แกแแฎแแก firmware แแ แ.แจ.
แแ แแฃแแแ แแก Runtime แแแฎแแกแแแแแแแแแ
แ แแแแ แช แฃแแแ แแแฅแแ, QEMU แแ แแก แแแแแฃแแ แแฃแแขแแ แแแแ แแแแกแแแ, แแแแ แแ แแ แแฃแแแ แก แแก แแ แแฅแแก. แแแฃ, แแ แ... แแแแแแแ แแก แกแแแ แแแ แแ แแ แกแแแแแแ, แจแแแแแ แแแแแฉแแแ WebWorkers - แ แแแแแแแแแช แแ แแแกแแแก, แแก แแ แแก แแ แแแแแซแแแแแแ แแแแแแแแแแแก แแแแแแก แกแแคแฃแซแแแแแ แแแแแแ แแแฃแแ แชแแแแแแแแก แแแ แแจแ. แแฃแแแแ แแแแ, แแก แฅแแแแก แแแแจแแแแแแแแ แแ แแแแแแแแก แกแแแแแ แ แแแฎแกแแแ แแแแก แแแแแแแก แกแแคแฃแซแแแแแ แแ แกแแแฃแแ แแแแแก แแแ แขแแ แแแแกแแก. แจแแแแแ, แกแแแแแแแแแแแก แแแฌแแแแก แฅแแแจ, แแก แกแแฎแแแแแแช แแแแฎแแ แชแแแแแ SharedArrayBuffers
. แแแแแแแแแแแแ แแแแแแ แแ, แกแฎแแแแแกแฎแแ แแ แแฃแแแ แแแจแ แแฆแแแจแแแก แแแกแ แแแจแแแแ, แจแแแแแ แแฆแแแจแแแก แแฎแแแ แฌแแแ แแ แจแแแแแ Meltdown... แ แแก แจแแแแแแแช แแแแแแแแ แแแกแแแแแแแ, แ แแ แแ แแแก แฃแฎแแจแ แแ แฃแฎแแจแ แแแแแแแ, แแแแ แแ แกแแแ แแ แแแฎแกแแแ แแแแก แแ แ. แซแแคแ แแแขแฃแแแแก แแ แแชแฎแแแแก, แแก แงแแแแแคแแ แ แแ แแ แแ แแแแแแ
แแแแ แ แแแฎแแกแแแแแแแแแ แกแขแแแแ แแแแแแ แแแแแก แแแแแแฃแแแชแแแแแก แจแแฃแซแแแแแแแ: แแฅแแแ แแ แจแแแแซแแแแ แฃแแ แแแแ แแแฆแแ, แจแแแแแฎแแ แแแแแแแแ แ แแแแขแแฅแกแขแ แแ แแแแแฎแแแแแ แแฎแแแแ แแฎแแแ แกแขแแแแ. แแแ แแก แแแกแขแแก แแแ แแแแก JS แแแ แขแฃแแแฃแ แ แแแแฅแแแ. แ แแแแ แช แฉแแแก, แ แ แแ แแก แแ แแแแแแ, แ แแแแแ แฉแแแ แแแแแช แแแแแแฌแงแแแขแแ แงแแคแแแ แแแแแแแแแก แแแ แแแ แแแแแแแแ แฎแแแแ? แคแแฅแขแแ, แ แแ QEMU-แจแ I/O แแแแแ แฎแแ แชแแแแแแแ แแแ แฃแขแแแแก แกแแจแฃแแแแแแ แแ แกแฌแแ แแ แแฅ แแแแแแแแแ แแแแแแ แแแแแก แกแขแแแแก แแแแแแฃแแแชแแแแ. แกแแแแแแแแ แแ, Emscipten แฃแแแ แจแแแชแแแก แแกแแแฅแ แแแฃแแ แแแแ แแชแแแแแก แแแฅแแแแแแก, แแฃแแแแช แแ แก:
แแ แแ แแแกแแแแก, แแ แฏแแ แแแ แแแแแฎแแ แฎแ แแแแแก แแแงแแคแ, แ แแแแแแช แจแแแแแแแแแ WASM-แจแ แแ แแแขแแ แแ แแขแแ แแแฃแแแ Emterpreter-แแก แแแแแงแแแแแแ, แแแแขแแ แแแแแแก แแแฌแงแแแแแแแแแ แฏแแ แแ แแฃแจแแแแก (แแฎแแแแ แจแแแแแ แกแแ แแแจแ, แ แแแแ แช แแแแแแแ...). แแแฃ, แกแแแแแแแ แแฅแแแ แฃแแแ แแแแฆแแ แแกแแแแกแ แกแแกแแชแแแ แคแแแแแแ แ แแ:
- แแแขแแ แแ แแขแแ แแแฃแแ แแแแแ I/O. แแกแ, แแแ แแแ แแแแแแ แแแแขแแ แแแฃแ NVMe-แก แแจแแแแแฃแ แ แจแแกแ แฃแแแแแ? ๐
- แกแขแแขแแแฃแ แแ แจแแแแแแแแ แซแแ แแแแแ QEMU แแแแ (แแแแ แแแแแแ, แกแฎแแ แแแฃแแแ แแแฃแแ แแแฌแงแแแแแแแแแ แแ แ.แจ.)
- แแแแแแแฃแ แแ แจแแแแแแแแ แกแขแฃแแ แแก แแแแ WASM-แจแ
QEMU แฌแงแแ แแแแแก แแแฎแแกแแแแแแแแแ
แ แแแแ แช แแฅแแแ แฃแแแ แแแฎแแแแ, แกแขแฃแแ แแก แแ แฅแแขแแฅแขแฃแ แแก แแแฃแแแชแแแก แแแแ แแ แแแกแแแแซแแแ แแแแฅแแแแก แแแกแขแ แฃแฅแชแแแแแก แแแแแ แแ แแแแก แแแแ แแแแแงแแคแแแแ QEMU-แจแ. แกแแแแแแแแแแจแ, แแก แชแแขแ แฃแคแ แ แ แแฃแแแ:
- แแ แแก แกแขแฃแแแ แ แแ แฅแแขแแฅแขแฃแ แแแ
- แแ แกแแแแแก แแแแฉแฅแแ แแแแแแ, แแแ แซแแ, KVM แขแแฅแแแแแก แแแ แขแฃแแแแแแชแแแกแแแแก Linux-แแ (แกแขแฃแแแ แ แแ แแแกแแแแซแแแ แกแแกแขแแแแแแกแแแแก แแ แแแแแแแแแ แแแแกแแแแแ), TCG JIT แแแแแก แแแแแ แแ แแแแกแแแแก แแแแแกแแแแ แแแแแแแก. QEMU 2.9-แแแ แแแฌแงแแแฃแแ, แแแแแฉแแแ HAXM แขแแฅแแแแแก แแแ แขแฃแแแแแแชแแแก แกแขแแแแแ แขแแก แแฎแแ แแแญแแ แ Windows-แแ (
แแแขแแแแแ ) - แแฃ แแแแแแงแแแแแ TCG แแ แแ แ แขแแฅแแแแแก แแแ แขแฃแแแแแแชแแ, แแแจแแ แแแก แแฅแแก แชแแแแแฃแแ แแแแแก แแแแแ แแ แแแแก แแฎแแ แแแญแแ แ แแแแแแฃแแ แฐแแกแขแแก แแ แฅแแขแแฅแขแฃแ แแกแแแแก, แแกแแแ แฃแแแแแ แกแแแฃแ แ แแแ แฏแแแแแแกแแแแก.
- ... แแ แแ แงแแแแแคแ แแก แแแ แจแแแ - แแแฃแแแ แแแฃแแ แแแ แแคแแ แแฃแแ แแแฌแงแแแแแแแแแ, แแแแฎแแแ แแแแแก แแแขแแ แคแแแกแ, แแแแ แแชแแ, แฉแแแแฌแแ แ-แแแแแแ แแแ แแ แ.แจ.
แกแฎแแแแ แจแแ แแก, แแชแแแแ: QEMU-แก แจแแฃแซแแแ แแ แ แแฎแแแแ แแแแแ แแแแแแฃแขแแ แแก, แแ แแแแ แแ แแชแแกแแ แแก แแแแแซแแ แฐแแกแขแแก แแแ แแแจแ แชแแแแ แแแแฎแแแ แแแแแก แแ แแชแแกแแกแแแแก, แ แแแแแกแแช แแงแแแแแก, แแแแแแแแแ, AFL fuzzer แแ แแแแแ แแแกแขแ แฃแแแแขแแชแแแกแแแแก. แแฅแแแ แแแแแแก แกแฃแ แก QEMU-แแก แแฃแจแแแแแก แแ แ แแแแแแก JS-แแ แแแแแขแแแ? ๐
แแกแแแ แ แแแแ แช แแ แซแแแแแแแแแ แฃแคแแกแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แฃแแแขแแกแแแ, QEMU แแแแแฃแแแ แแแ แแก แกแแจแฃแแแแแแ configure
ะธ make
. แแแฅแแแ, แแฅแแแ แแแแแฌแงแแแขแแ แแแแแแขแแ แ แแฆแแช: TCG backend, thread แแแแฎแแ แชแแแแแแ, แ แแฆแแช แกแฎแแ. แแฃ แฉแฅแแ แแแ แแงแแ แแแแแแแ แ/แจแแจแแแแแฃแแ (แฎแแแ แแแฃแกแแแ แจแแกแแแแแแกแก) Autoconf-แแแ แแแแฃแแแแแชแแแก แแแ แกแแแฅแขแแแแจแ - แกแแแแแแแแแแจแ, configure
QEMU-แแแ, แ แแแแ แช แฉแแแก, แแแแแแแแแแแ แแ แแ แแคแ แแกแแแ แแ แแ แแก แฌแแ แแแฅแแแแแ.
WebAssembly
แ แ แฐแฅแแแ แแ แแแแแก WebAssembly (แแแ WASM)? แแก แแ แแก Asm.js-แแก แฉแแแแชแแแแแ, แ แแแแแแช แแฆแแ แแ แแก แแ แแขแแแแแ, แ แแแแ แช แแแฅแแแแ JavaScript แแแแ. แแแ แแฅแแ, แแก แแ แแก แฌแแแแแ แแแแแ แฃแแ แแ แแแขแแแแแแแฃแแ แแ แแแกแจแ แแแแแ แ แแชแฎแแแก แฃแแ แแแแ แฉแแฌแแ แแช แแ แแ แแ แแก แซแแแแแ แแแ แขแแแ: แแแแแแฅแขแฃแ แแแแกแแแแก แแก แแแแฎแแแ แคแแ แแแขแจแ.
แจแแกแแซแแแ แแกแแแแแแ แแแแแแ แฃแแแแแก แแแแแ แแแแแก แจแแกแแฎแแ Asm.js-แแกแแแแก - แแก แแ แแก โแแแฆแแแ แแแแแกโ แแแแแแแก แแแแขแ แแแแก แแแกแขแ แฃแฅแชแแแแแก แแฆแแแแแ (แแแฃ, if-then-else, loops แแ แ.แจ.), แ แแกแแแแกแแช แจแแฅแแแแแแ JS แซแ แแแแแ. แแแแแแ แแแแแก LLVM IR, แฃแคแ แ แแฎแแแก แแ แแก แแ แแชแแกแแ แแก แแแแ แจแแกแ แฃแแแแฃแแ แแแแฅแแแแก แแแแแแ. แแฃแแแแ แแแแ, QEMU-แแก แจแฃแแแแแฃแ แ แฌแแ แแแแแแแแแแแแ แฃแคแ แ แแฎแแแก แแ แแก แแแแ แแกแแแ. แ แแแแ แช แฉแแแก, แแฅ แแ แแก, แแแแขแแแแแ, แขแแแฏแแแก แแแกแแกแ แฃแแ... แแ แจแแแแแ แแ แแก แแแแแแแ, แแฃ-แแแจแแ-แกแฎแแ แแ แแแ แงแฃแแแแ!..
แแ แแก แแ แแก แแแแแ แแ แแ แแแแแแ, แ แแก แแแแแช Binaryen แแ แแก แกแแกแแ แแแแแ: แแแก แจแแฃแซแแแ แแฃแแแแ แแแแ แแแแฆแแก แแแฆแแแ แแแแแก แแแแแแแ แแฎแแแก, แ แแช แจแแแแแฎแแแ WASM-แจแ. แแแแ แแ แแแก แแกแแแ แจแแฃแซแแแ แจแแฅแแแแก แแแแ แซแแ แแแแแ แแแแแแแแก แแ แแคแแแแแแ แแ แแแ แจแแ แแก แแแแแกแแแแแแแแ. แแกแ, แแ แฃแแแ แแแฅแแ, แ แแ แแก แแแแแแก WebAssembly แจแแแแฎแแแก แคแแ แแแขแก แแแกแแฎแแ แฎแแแแแ C/C++ API-แก แแแฆแแ.
TCG (แแแขแแ แ แแแแแก แแแแแ แแขแแ แ)
GCT tcg_qemu_tb_exec
, แซแแแแแ แกแแกแแ แแแแแ แแฆแแแฉแแแ แฉแแแแแแก.
QEMU-แจแ แแฎแแแ TCG backend-แแก แแแกแแแแขแแแแแ, แแฅแแแ แฃแแแ แจแแฅแแแแ แฅแแแแแ แแฅแขแแ แแ tcg/<ะธะผั ะฐัั
ะธัะตะบัััั>
(แแ แจแแแแฎแแแแแจแ, tcg/binaryen
), แแ แจแแแชแแแก แแ แคแแแแก: tcg-target.h
ะธ tcg-target.inc.c
ะธ configure
. แแฅแแแ แจแแแแซแแแแ แกแฎแแ แคแแแแแแแก แแแแแแแกแแแ แแฅ, แแแแ แแ, แ แแแแ แช แแ แแ แแก แกแแฎแแแแแแแแ แแแฎแแแแแแ, แแ แแแ แแฅแแแแ แฉแแ แแฃแแ แกแแแแ: แแ แแ, แ แแแแ แช แฉแแแฃแแแแ แแแ แกแแแแฃแ แแก แคแแแแ (แแก แจแแแแก tcg/tcg.h
แแ แแก แฃแแแ แแ แแก แแแ แแฅแขแแ แแแแแก แกแฎแแ แคแแแแแแจแ tcg
, accel
แแ แแ แ แแฎแแแแ), แแแแ แ - แแฎแแแแ แ แแแแ แช แแแแแก แแแฌแงแแแขแ tcg/tcg.c
, แแแแ แแ แแแก แแฅแแก แฌแแแแแ แแแก แกแขแแขแแแฃแ แ แคแฃแแฅแชแแแแแ.
แแแแแแฌแงแแแขแ, แ แแ แซแแแแแ แแแ แแ แแก แแแแฎแแ แฏแแแแ แแแขแแแฃแ แแแแแแแแแแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แแฃแจแแแแก แแแ, แแ แฃแแ แแแแ แแแแแแแแแ แ แแ แแ แ แคแแแแแก โแฉแแแฉแฎแแแโ แกแฎแแ backend-แแก แแแแแแแแแขแแชแแแแแ, แแฃแแฌแ แคแแแแ แแแแฃแแแแ แแก แแแชแแแแแแก แกแแแแฃแ แจแ.
แคแแแแ tcg-target.h
แจแแแชแแแก แซแแ แแแแแแ แคแแ แแแจแ แแ แกแแแฃแ แแแ แแแแขแ แแแก #define
-s:
- แ แแแแแแ แ แแแแกแขแ แ แแ แ แ แกแแแแแแ แกแแแแแแ แแ แฅแแขแแฅแขแฃแ แแแ (แแแแฅแแก แ แแแแแแแช แแแแแแ, แ แแแแแแแช แแแกแฃแ แก - แแแแฎแแ แฃแคแ แ แแแแแแ, แแฃ แ แ แแฅแแแแ แแแแแ แแ แแแฃแแ แแ แแฃแแแ แแก แแแแ แฃแคแ แ แแคแแฅแขแฃแ แแแแจแ "แกแ แฃแแแแ แกแแแแแแ" แแ แฅแแขแแฅแขแฃแ แแแ ...)
- แฐแแกแขแแก แแแกแขแ แฃแฅแชแแแแแก แแแกแฌแแ แแแ: x86-แแ แแ แแฃแแแแช TCI-แจแ, แแแกแขแ แฃแฅแชแแแแ แกแแแ แแแ แแ แแ แแก แแแกแฌแแ แแแฃแแ, แแแแ แแ แแ แแแแแ แแ แแแแแก แแฃแคแแ แจแ แฉแแกแแแก แแ แ แแแกแขแ แฃแฅแชแแแแ, แแ แแแแ แแแแแแแแแแ Binaryen แแแแแแแแแแแก แกแขแ แฃแฅแขแฃแ แแแแ, แแกแ แ แแ, แแ แแแขแงแแ: 4 แแแแขแแแ
- แ แ แแ แแกแแแแแแแแฃแแ แแแกแขแ แฃแฅแชแแแแแก แแแแแ แแ แแแ แจแแฃแซแแแ backend-แก - แฉแแแ แฉแแ แแแแ แงแแแแแคแแ แก, แ แแกแแช แแแแแแแ Binaryen-แจแ, แแแแ แแแแชแแ แแแแฉแฅแแ แแแแแก แแแแแ แฉแแแ แฃแคแ แ แแแ แขแแแแแแ แแแงแแก.
- แ แ แแ แแก TLB แฅแแจแแก แกแแแแ แแฃแแ แแแแ, แ แแแแแแช แแแแฎแแแแแแแ backend-แแก แแแแ . แคแแฅแขแแ, แ แแ QEMU-แจแ แงแแแแแคแแ แ แกแแ แแแแฃแแแ: แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแ แแก แแแแฎแแแ แ แคแฃแแฅแชแแแแ, แ แแแแแแแช แแกแ แฃแแแแแ แแแขแแแ แแแแก/แจแแแแฎแแแก แกแขแฃแแ แแก MMU-แก แแแแแแแแกแฌแแแแแแ (แกแแ แแแฅแแแแแแแ แแฎแแ แแแก แแแ แแจแ?), แแกแแแ แแแแฎแแแแ แแแแแแแ แแแ แแแแ แฅแแจแก แกแขแ แฃแฅแขแฃแ แแก แกแแฎแแ, แ แแแแแก แแแแฃแจแแแแแ แแแกแแฎแแ แฎแแแแแแ แฃแจแฃแแแแ แกแแแแฃแฌแงแแแแ แแแแแแแจแ แฉแแกแแ แแแแแ. แกแแแแแฎแแแแ, แ แ แแคแกแแขแ แแฃแจแแแแแแ แแ แกแขแ แฃแฅแขแฃแ แแจแ แงแแแแแแ แแคแแฅแขแฃแ แแ แแ แซแแแแแแแแก แแชแแ แ แแ แกแฌแ แแคแ แแแแแแแแแแ แแแแ?
- แแฅ แจแแแแซแแแแ แจแแชแแแแแ แแ แแ แแ แแ แ แ แแแแ แแแ แแแฃแแ แ แแแแกแขแ แแก แแแแแจแแฃแแแแ, แฉแแ แแแ แขแฃแแแ แแฃแแแแแก แแแแแซแแฎแแแ แคแฃแแฅแชแแแก แกแแจแฃแแแแแแ แแ แกแฃแ แแแแแกแแแแแ แแฆแฌแแ แแ แ แแแแแแแแ แแชแแ แ
inline
- แคแฃแแฅแชแแแแแ แแแก, แ แแแแ แแชแแflush_icache_range
(แแแแ แแ แแก แแ แแ แแก แฉแแแแ แจแแแแฎแแแแ)
แคแแแแ tcg-target.inc.c
แ แ แแฅแแ แฃแแแ, แฉแแแฃแแแแ แแ, แแแแแ แแแชแแแแแแ แแแแแ แแ แจแแแชแแแก แ แแแแแแแแ แกแแแแแแแแฃแแ แคแฃแแฅแชแแแก:
- แแแแชแแแแแแแชแแ, แแแ แจแแ แแก แจแแแฆแฃแแแแแ, แแฃ แ แแแแ แแแแ แแขแแ แแแแ แจแแแซแแแแ แแแฅแแแแแแแแก แแแกแขแ แฃแฅแชแแแแ. แฃแฎแแจแแ แแแแแแแ แแแฃแแแ แฉแแ แแแแ แกแฎแแ แแแฅแแแแแแแ
- แคแฃแแฅแชแแ, แ แแแแแแช แแฆแแแก แแ แ แจแแแ แแแแขแแแแแแก แแแกแขแ แฃแฅแชแแแก
- แแฅ แแกแแแ แจแแแแซแแแแ แแแแงแแแแ แแแแฎแแแ แ แคแฃแแฅแชแแแแ, แแกแแแ แจแแแแซแแแแ แแแแแแงแแแแ แกแขแแขแแแฃแ แ แคแฃแแฅแชแแแแ
tcg/tcg.c
แฉแแแแแแก แแแแ แฉแแ แจแแแแแแ แกแขแ แแขแแแแ: แจแแแแแแ แแแ แแแแแแก แแแแแแก แแแ แแแ แกแแขแงแแแแจแ แแแแฌแแ แ แแแฎแ แแแฉแแแแแแแแ: แกแแฌแงแแกแ แแแจแแแ (แแแ แแแแฃแแ แแแแจแแแแแแแ แกแแแฎแแแแแก 0xFFFFFFFF
, แ แแแแแแแช แแแแกแแแฆแแ แ แขแฃแแแ แแฃแแแแแก แแแแแแแแแแแ แแแแแแแ แแแแ), แแแแขแแฅแกแขแ, แแแแแ แแ แแแฃแแ แแแแฃแแ แแ แฏแแแแกแแฃแ แ แแแแแ แ แแแแแ แแแแกแแแแก. แแแแแแแแ แแแแแ แแแจแแแ แแแแแแกแแ 0xFFFFFFFF - n
แกแแ n
- แแชแแ แ แแแแแแแแ แ แแชแฎแแ แแ แงแแแแ แฏแแ แแ, แ แแชแ แแแ แแกแ แฃแแแแแ แแแ แฏแแแแแก แแแจแแแแแแ, แแก แแแ แแแแแแ 1-แแ. แ แแชแ แแแแฆแฌแแ 0xFFFFFFFE
, แจแแแแ แจแแแแแแ, แแแแฃแแ แจแแแแฎแฃแแ แแงแ แคแฃแแฅแชแแแแแก แชแฎแ แแแจแ, แแแแแ แขแแ แแแฃแแ แแงแ แแแขแแ แ โแแแแจแแแแจแโ, แกแแแแแแแช แแแฎแแ แจแแกแ แฃแแแแ. tcg_qemu_tb_exec
แแ แแแแฃแแ แแแแแฆแแก QEMU แแแฎแกแแแ แแแแแแ.
แแแแกแแแแกแแแแก แแแ แแคแ แแแแ แแแแกแแแแก, "แแ แแแขแ, แ แแแแแแก แแ แฌแงแแแก แแ แฎแแแจแ แแ แแแแ แแก แแฃแแแกแแแแก...". แแฃแแชแ แแแฎแกแแแ แแแ แกแแแฆแแช แแแแแแแ. แฃแคแ แ แแแขแแช, แแแฎแกแแแ แแแแก แแแ แแแแแ QEMU! แแ แแฅแแแแ แแแแ, แ แแแแแแช, แจแแแแแแ แแแกแขแ แฃแฅแชแแแก แแแฌแแ แแกแแก (แแแ แแแ, แแก แแ แแก แแแฉแแแแแแแแ), แฌแแแจแแแ แแก, แแแกแ แแแฃแแแช แแแ แ แแงแ แแ แแแแแแแก, แแแแ แแ แแแแ แแ แฃแจแแแแ. แกแแแแแแแแแแจแ, แฃแแแ แขแแแแก แจแแแแฎแแแแแจแ, QEMU แแแแแงแแคแก แแแฎแกแแแ แแแแก แแแจแแแแแกแแก แแ แแฅ แฌแแ แก แแแแแ แแ แแแฃแ แแแแก. แ แแแแกแแช แแฃแคแแ แ แแแแแฌแฃแ แแแ, แแแแ แแจแแแแ แแ แแแก แแแแแแแก แแฌแงแแแ แจแแแแแแแก แฉแแฌแแ แ.
แแแแแก แจแแกแฌแแแแแก แจแแแแแ แแแแฎแแแ, แ แแ แฏแแแแกแแฃแ แ แแแแ แแก แฎแ แแแแ แกแแจแฃแแแแแ แแแแชแ, แแ แแแแแแ แชแฎแแ แแ แแแแก แแแแแแแฃแ แแแแกแแก, แแแ แแแแแแ แฃแฆแแแขแแฎแแแแ แแ แแแแแแแชแแแแแแแแฃแ แแฃแคแแ แแ แ แแแแ แจแแชแแแแแก แแแแแแแกแฃแคแแแแแ. แแแแ แแ แแแ แฎแแแแฎแแ แฌแแ แก แแฃแคแแ แก, แ แแ แแแแแแแแแแแ แแแแ แแแก แแแแแ แฉแแแ แคแฃแแฅแชแแ? แ แแแแ แช Emscripten-แแก แแแแแแแแแ แแแ แแแแ แฉแแแแ, แ แแชแ แแ แแแแแแ แจแแแแฅแแแ, แแแฆแแแฃแแ แแแแ แแแแแแแขแแแ แฃแแแ แแจแแแแแฃแ แแแแแแแชแแแจแ, แแแแแงแแแ แแแกแแ Mozilla Record-Replay... แแแแแแแ, แกแแแแแแแ แแแแฎแแแ แแแ แขแแ แ แแแแก: แแแแแแฃแแ แแแแแแกแแแแก, แ struct TranslationBlock
แแแแแกแ แแฆแฌแแ แแ. แแแแแแชแแแแ แกแแ... แแกแแ, แแฃแกแขแแ แแฃแคแแ แจแ แแแแแแก แฌแแ. แแแแก แแแชแแแแแแ แแแแ แแแแแแฌแงแแแขแ แงแแแแ แฏแแแแแก แแแแแงแแแแแ (แแแแแแฃแ แ แแแแแแแแ) แแแแแขแแแแแแแ แแ แฃแแ แแแแ แแแแแแงแแ แ แฏแแแแกแแฃแ แ แแแแแ แ แแ แแแ แฉแแแแแ แกแแขแงแแแแ แแแแแแแชแ. struct TranslationBlock
, แจแแฅแแแ แชแแแแฎแ แแแแ แแแแแแจแแ แแแฃแแ แกแแ, แ แแแแแแช แจแแแซแแแแ แกแฌแ แแคแแ แแแแแ แแก แแแ แแแแแแก แฅแแจแแก แแแแแขแแแ แแแแกแแก แแ แแแแแแแแกแฃแคแแแก แแแฎแกแแแ แแแ.
แ แฉแแแ แ แแแแแแแแ แฎแแแฏแแฎแแแ: แแแแแแแแแ, แแแแแจแแฃแแ แแแฉแแแแแแแแแ แแแแแก แแฃแคแแ แจแ - แแแแแแ แแ แแแแแแแ แฃแแ แแแแ BinaryenExpressionRef
, แแแฃ แแกแแแ แฃแงแฃแ แแแแ แแแแแแแแฅแแแแแแก, แ แแแแแแแช แฌแ แคแแแแ แฃแแแ แแงแแก แฉแแกแแฃแแ แแแแแ แแ แแแฃแ แซแแ แแแแ แแแแแจแ, แแแฌแแแ แแ แแก BB-แแแก แจแแ แแก แแแแแกแแแแก แแแ แแแ, แแแฌแแแ แแ แแก แกแแ แฌแแแแแแ. แแกแ, แฃแแแ แแ แแก แแแแแแแแแฃแแ แแแแแแแ Relooper-แแกแแแแก, แ แแแแแแแช แฃแแแ แแงแแก แแแแแแจแแ แแแฃแแ แแแ แแแแแแก แแแฎแแแแแ. แแแแ แแแแกแแกแฎแแแแแแแแ แแแแแแงแแแแแ แแแ แแฃแแ, แ แแ แแกแแแ แงแแแแ แแแกแฌแแ แแแฃแแแ แแแแแแฃแ แแแฎแ แแแแขแแ, แแกแ แ แแ แแฅแแแ แจแแแแซแแแแ แฃแกแแคแ แแฎแแ แแแแแแงแแแแ แงแแแแแแ แแแแแแแแ แแแแจแแแแแแแแแ แแ แ แแแขแ แแขแแแแขแแกแแแแก, แฃแแ แแแแ แฃแแแ แแแฎแกแแแแแ, แ แแ แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ แแแแแฆแแ แแแ. แกแฎแแแแ แจแแ แแก, แแกแแแ แแขแแแแขแแแ QEMU-แจแ แฃแแแ แแแแแแงแแแแแ TCG แแแ แงแฃแแแแแ แแแกแแแแก แแแแแแแก แแแแแแแแแกแแแแก.
Binaryen-แแก แแแแแงแแแแแ
WebAssembly-แแก แแแแฃแแแแ แจแแแชแแแก แคแฃแแฅแชแแแแก, แ แแแแแแแแแ แแแแแแฃแแ แจแแแชแแแก แกแฎแแฃแแก, แ แแแแแแช แแ แแก แแแแแฎแแขแฃแแแแ. แแแแแแแแฅแแแแแแ แแ แแก แแ แแแแแ แแ แแ แแแแแ แแแแ แแชแแแแ, แแแแแแแ, แ แแแแแแแช แจแแแแแแ แกแฎแแ แแแแแแแแฅแแแแแแแก แกแแแแแกแแแ, แกแแแแแขแ แแแ แแแแแแ แแ แ.แจ. แ แแแแ แช แฃแแแ แแแฅแแ, แแฅ แแแแขแ แแแแก แแแแแแ แแ แแแแแแแแฃแแแ แแฃแกแขแแ แ แแแแ แช แแแฆแแแ แแแแแก แแแแจแขแแแแแแ, แแแ แงแฃแแแแ, แคแฃแแฅแชแแแแแก แแแแแซแแฎแแแแแ แแ แ.แจ. แคแฃแแฅแชแแแแแก แแ แแฃแแแแขแแแ แแ แแ แแก แแแแแชแแแฃแแ แกแขแแแแ, แแแแ แแ แแจแแแ แแ, แแกแแแ แ แแแแ แช JS-แจแ. แแกแแแ แแ แแก แแแแแแแฃแ แ แชแแแแแแแ, แแแแ แแ แแ แแ แแแแแแแงแแแแแแ, แแแแขแแ แแแ แจแแกแแฎแแ แแ แแแขแงแแแ.
แคแฃแแฅแชแแแแก แแกแแแ แแฅแแ แแแแแแฃแ แ แชแแแแแแแ, แแแแแแ แแแ แแฃแแแแแ, แขแแแแก: int32 / int64 / float / double. แแ แจแแแแฎแแแแแจแ, แแแ แแแแ n แแแแแแฃแ แ แชแแแแแ แแ แแก แคแฃแแฅแชแแแแ แแแแแชแแแฃแแ แแ แแฃแแแแขแแแ. แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแฅ แงแแแแแคแแ แ แแ แแ แแก แแแแแ แแแแแแ แแแแแก แแแแขแ แแแแก แแแแแแแก แแแแแกแแแ แแกแแ, แแแแแ แ แแชแฎแแแแ แแแแแช แแ แแขแแ แแแแ แแขแ แแแฃแขแก โแฎแแแแแฌแแ แแแ/แฎแแแแแฃแฌแแ แแแโ: แ แแแแ แแฅแชแแแ แ แแชแฎแแ แแแแแแแแแแฃแแแ แแแแ แแชแแแก แแแแแ.
แแแแแแแ แ แแ แแแฅแแแ, Binaryen แฃแแ แฃแแแแแงแแคแก
แแฃแแชแ, แแฃ แแกแฃแ แ แแแแแก แแแขแแ แแ แแขแแชแแ แคแ แแแแก แแ แแก, แแแ แฏแแแแแก แแแกแขแแแชแแแก แแแแแแขแ แจแแฅแแแแกแ แแ แฌแแจแแแก แแแ แแจแ, แจแแแซแแแแ แแแ แ แฐแฅแแแแแก แแ แแแแแแแก C++ แคแแแแจแ แฉแแกแแ แแ แแฅแแแแ แแแ แแแแแ แแแ แแแ แแแแแแแแแแแก แแแแแ C++ API, แแแ แแแแ แแแก แแแแแ. แแแแแแแ แจแแคแฃแแแแแ.
แแกแ แ แแ, แแแแแก แจแแกแแฅแแแแแแ แแญแแ แแแแแ
// ะฝะฐัััะพะธัั ะณะปะพะฑะฐะปัะฝัะต ะฟะฐัะฐะผะตััั (ะผะพะถะฝะพ ะฟะพะผะตะฝััั ะฟะพัะพะผ)
BinaryenSetAPITracing(0);
BinaryenSetOptimizeLevel(3);
BinaryenSetShrinkLevel(2);
// ัะพะทะดะฐัั ะผะพะดัะปั
BinaryenModuleRef MODULE = BinaryenModuleCreate();
// ะพะฟะธัะฐัั ัะธะฟั ััะฝะบัะธะน (ะบะฐะบ ัะพะทะดะฐะฒะฐะตะผัั
, ัะฐะบ ะธ ะฒัะทัะฒะฐะตะผัั
)
helper_type BinaryenAddFunctionType(MODULE, "helper-func", BinaryenTypeInt32(), int32_helper_args, ARRAY_SIZE(int32_helper_args));
// (int23_helper_args ะฟัะธะพะฑ^Wัะพะทะดะฐัััั ะพัะดะตะปัะฝะพ)
// ัะบะพะฝััััะธัะพะฒะฐัั ััะฟะตั-ะผะตะณะฐ ะฒััะฐะถะตะฝะธะต
// ... ะฝั ััั ัะถ ะฒั ะบะฐะบ-ะฝะธะฑัะดั ัะฐะผะธ :)
// ะฟะพัะพะผ ัะพะทะดะฐัั ััะฝะบัะธั
BinaryenAddFunction(MODULE, "tb_fun", tb_func_type, func_locals, FUNC_LOCALS_COUNT, expr);
BinaryenAddFunctionExport(MODULE, "tb_fun", "tb_fun");
...
BinaryenSetMemory(MODULE, (1 << 15) - 1, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
BinaryenAddMemoryImport(MODULE, NULL, "env", "memory", 0);
BinaryenAddTableImport(MODULE, NULL, "env", "tb_funcs");
// ะทะฐะฟัะพัะธัั ะฒะฐะปะธะดะฐัะธั ะธ ะพะฟัะธะผะธะทะฐัะธั ะฟัะธ ะถะตะปะฐะฝะธะธ
assert (BinaryenModuleValidate(MODULE));
BinaryenModuleOptimize(MODULE);
... แแฃ แ แแแ แแแแแแแฌแงแแ, แแแแแจแ, แแก แแฎแแแแ แแแกแจแขแแแแก แฌแแ แแแกแแฉแแแแแแ แแ แแแขแแแแแ แแแแฃแแแแขแแชแแแจแแ.
แแ แแฎแแ แแฌแงแแแ crack-fex-pex, แแแแฎแแแแแแ แแกแแแ:
static char buf[1 << 20];
BinaryenModuleOptimize(MODULE);
BinaryenSetMemory(MODULE, 0, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
int sz = BinaryenModuleWrite(MODULE, buf, sizeof(buf));
BinaryenModuleDispose(MODULE);
EM_ASM({
var module = new WebAssembly.Module(new Uint8Array(wasmMemory.buffer, $0, $1));
var fptr = $2;
var instance = new WebAssembly.Instance(module, {
'env': {
'memory': wasmMemory,
// ...
}
);
// ะธ ะฒะพั ัะถะต ั ะฒะฐั ะตััั instance!
}, buf, sz);
แแแแกแแแแแก, แ แแ แ แแแแ แแ แแแแแแแแจแแ แแ QEMU แแ JS แกแแแงแแ แแแแ แแ แแแแแแ แแฃแแแ แกแฌแ แแคแแ แแแแแฆแแ แแแแแแแแ แแแฃแแ แคแฃแแฅแชแแแแ, แจแแแฅแแแ แแแกแแแ (แคแฃแแฅแชแแแแแก แชแฎแ แแแ แแแแจแแแแจแ แแแแแ แขแแกแแแแก) แแ แแฅ แแแแแแแกแแ แแแแแ แแ แแแฃแแ แคแฃแแฅแชแแแแ. แแแแแฅแกแแก แกแฌแ แแคแแ แแแแแกแแแแแแแแ, แแแแแแแแ แแแแแ แแแแแแงแแแแแแแ แแฃแแแแแแ แกแแขแงแแแก แแแแ แแแแแแแแแแ แแแแแแก แแแแแฅแกแ, แแแแ แแ แจแแแแแ แแ แคแแ แแฃแแแ แแแแแแแแแแ แแแแแฅแกแ แแแแฌแงแ แฃแแ แแแแ แแแแจแ แแแ แแแแ. struct TranslationBlock
.
แกแฎแแแแ แจแแ แแก,
แฏแแ แกแฃแ แแกแแ. แแฅแแแ แกแฎแแ แกแขแแขแแ แแงแแก แแฃ แแแแแ แแแแแขแแ แแกแแแแ. แแแ แซแแ, แ แฉแแแ แแแแแช แฃแแ แแแแ แแแแแแก แแแฌแงแแแแแแแแแแก แแฃแจแแแแ. แจแแกแแซแแแ แแแ แแช แฐแฅแแแแแก, แ แแ WebAssembly แแแแฃแแแแแก แแแแแแแแชแแ แแงแแก แแกแแแฅแ แแแฃแแ, แ แแแแ แช แแก แฉแแแฃแแแแ แแ แฎแแแแ JS แกแแแงแแ แแจแ, แ แแแแแ แฏแแ แแแแแ แแ แแก แแแ แฏแแแแแ, แ แแแแแกแแช แจแแฃแซแแแ แแแแแแแแก แแก แงแแแแแคแแ แ แแแแแ, แกแแแแ แแจแแแแแฃแ แ แแแแฃแแ แแแแ แแ แแฅแแแแ.
แแแแแก แแแแแชแแแ: แแฅแแแ แจแแแแแแแแ แแแแแ แ 32-แแแขแแแ แแ แฅแแขแแฅแขแฃแ แแแ, แแแแ แแ แแแแ แแแฎแกแแแ แแแแก แแแแ แแชแแแแแก แแแจแแแแแแ แแแแก Binaryen-แแแ, แกแแแแ แกแขแแแแ, แแ แกแแแแ แกแฎแแแแแ 2-แแแขแแแแ แแแกแแแแ แแแแแก แกแแแ แชแแก แแแแ 32 แแ-แจแ. แแ แแแแแแ แแก แแ แแก, แ แแ Binaryen-แแก แแแแแกแแแ แแกแแ, แแก แแ แแก แฌแแแแแ แซแแแแแ แแแ แจแแแแแแ แแแกแแแแ แแแ. แ แแแแ แแแแแจแแ แแ แแก?
แแแแแแแกแขแ แแขแแ แแก แแแแ
แแ แแ แแแแแกแ แฃแแ แแแแก แขแแกแขแแ แแแ, แแแแ แแ แฉแแแ แแแ แแแแ แแแ แ แแงแ "แ แ แแแฎแแแแ, แแฃ 32-แแแขแแแแ Linux แแแแแแแกแขแแแแ แ?" แจแแแแแ แแแกแแแแ แแแแแก แกแแแ แชแแก แแแแ แแแฌแแแ แแแแแแแแแก แแแ แแแก. แแ แแแแแ แแ แกแแแแแฎแแ, แ แแแแแแ แแฅแแแแ แแแแแแแแฃแแ: 1 แแฃ 2 แแ.
แแ แแแ แแแแกแขแแก แแแแ (แแแ แแแแขแ แแ แแฅแขแแแแกแแแแกแแแแก)
แแแแแ แแแคแแแฅแแ แแฃแจแขแ แแแกแแแแ แแแแแก แกแแแ แชแแก แแแแ แแแฌแแแจแ. แแ แแแแแแ แแ แแแกแแแก, แ แแขแแ แแฃแจแแแแก - แแฅ แฃแแแ แฃแแแ แแงแแก แแแกแขแ. แแแแ แแ "แฉแแแ แแ แแฅแขแแแแกแแแ แแแ แ: แงแแแแแคแแ แ แแฃแจแแแแก แฉแแแแแแแก, แแแแ แแ แแ แแแแ แแชแแก แ แแขแแ..."
// 2gbubble.c
// Usage: LD_PRELOAD=2gbubble.so <program>
#include <sys/mman.h>
#include <assert.h>
void __attribute__((constructor)) constr(void)
{
assert(MAP_FAILED != mmap(1u >> 31, (1u >> 31) - (1u >> 20), PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
}
...แแแ แแแแแ แแแแแ แแแแแแ แแ แแ แแก แแแแกแแแแแ, แแแแ แแ, แกแแแแแแแแ แแ, แแแแแ แแแแแ แแแแ แซแแแแแ แแคแแฅแขแฃแ แแ แฃแแแซแแแแก แงแแแแแก แแฅแแแแ :)
แแฅแแแ แแแแแแ แฃแแแ แแฎแกแแแก แ แแแแ แแฃแจแแแแก แฉแแแ แแก แแแแ...
แฌแงแแ แ: www.habr.com