×Ö·××Öž× ××××£ ×Ö· ׊××Ö·× ××× ××ַש××Öž×¡× ×€Ö¿×ַך ש׀֌×ַס ××Ö·××××Ö·×× ×× ×š×××עךס×Ö·×××××× ×€×× ××¢× ×€ÖŒ×š×֞׊עס ××× ××¢×š× ×¢× ××× ×Š× ×××©×¢× ×¢×š××× ××ש×Ö·×××ַסקך××€ÖŒ× (×עך ××¢× ××, Asm.js) ×€Ö¿×× ××ַש×× ×§×Öž×. QEMU ××× ×××ס×עך×××××× ×€Ö¿×ַך ×עך עקס׀֌עך×××¢× ×, ××× ×¢×××¢××¢ ××Öž× ×©×€ÖŒ×¢×עך ×Ö·× ×ַך×××§× ××× ××¢×××¢× ×עשך××× ××××£ ××ך. ××× ×× ××Ö·×עךק×× ××¢× ××× ××× ××¢×××¢× ×Ö·××××××× ×Š× ×š××××ק ×× ×€ÖŒ×š×××¢×§× ××× ×××¢××ַססע××××, ××× ××€××× ×€×ַך××Öž×× ××× ×ÖŒ××¢× ×€×ַך××ק ××× ××× ×¢×€×¢×¡ × ××©× ××¢××××× ×× ×€×š××עק×... ×× ×ך××¢× ××× ××¢×××¢× ×× ××¢××× ××¢×, ××עך ×××עך ××× ××××, ××× ×ע׊×, ×ע׊×× ×¡ ××× ××¢× ×¢× ×ך×××§× ××× ×ך××ס
××ַסקס
××× × ××× ××× ×©××× ××¢××¢×š× × ××× ×Š× "ע׀עס" ×€ÖŒ×Öž×š× QEMU ×Š× ××ש×Ö·×××ַסקך××€ÖŒ×, ××֞ס ××Öž× ×¢×¡ ××× ××ַש××Öž×¡× ×Š× ××Öž× ×¢×¡ ××××××× ××× × ××©× ×××עך×××š× ×Ö·×× ××ס×××קס.
××¢×ת × ××עך ××××: ׊××××Ö·× ×€Ö¿×× ×€×× × ××¢×××× ×
×××Ö·× ×¢×š×©×עך ×ך××Ö·× ××× ××¢×××¢× ×Š× ××Öž×€ÖŒ× ×××× ××עךס××¢ ×€Ö¿×× ×× ×ַ׀֌ס×ך×× ××עךס××¢ 2.4.1. ××¢×š× ×Öž× ×¢×¡ ××¢×××¢× ×Š× ××ך ×Ö· ××××¢ ××¢××Ö·× ×§: ×××× ×€×× × ××¢×××× × ××××סץ, עס ××× ××ס××Öž××¢ ×עך ס××Ö·××× ××× ×€ÖŒ×©×× 2.4, ××× ××€××× ×עך ×Ö·××× ×× ×Š××××Ö·× master
. ××× ××× × ××× ×€ÖŒ××Ö·× × ×¢× ×Š× ××××× ×Ö· ש××× ×¡×××¢ ×€×× ââ×××× ×××××¢× ×¢ ××Ö·××, ××× ××× × ×× ××Ö·×š×€Ö¿× ××עך עס ×× ×Ö·× ×עךש. ×××× ××× ××× ×סת×× ×××ס××¢××¢×. ××עך ××Öž ××× ×× ××Ö·×: QEMU ××× × ××©× ×©×××× × ×Öž×, ××× ××× ×¢×××¢××¢ ×€×× × ××× ××€××× ×××××¢ ×Ö·×€ÖŒ××Ö·××Ö·×××ש×Ö·× ×€×× ×× ×××©×¢× ×¢×š××××Ö·× ×§×Öž× ×××š× 10 ׀֌ך×Öž×Š×¢× ×. "××Öž, ×××Š× ××× ××× ××¢××× ××¢× ×Š× ×€×š×ך×," ××× ××¢××Ö·× ×§ ××× ×Š×¢×ך×××. ××Öž ××ך ××Ö·×š×€Ö¿× ×Š× ××Ö·×× ×Ö· ×××ךעש×Ö·×: ךע×× ×Š× ×עך ××××-×ךע××× × ×Ö·××ך ×€×× QEMU.js ××× ×× ×€×Ö·×§× ×Ö·× ×עך ×֞ך×××× ×¢× QEMU ××× × ××©× ×××× ×¢× ×× ×€×¢×× ×€×× ×××××-×ךע××× × (××֞ס ××× ×× ×€×××ק××× ×Š× ×¡××××Ö·××××× ××ַס×× ×ַך××¢×× ×¢×××¢××¢ ×Ö·× ×š××××××× ×§×Öž× ×€ÖŒ×Ö·×ס, ××× × ×× × ×֞ך "× ××Š× ×Ö·××¢ ×§×¢×š× ×Ö·××") ××× ×§×š×××ש ×€Ö¿×ַך עס, ×× ××××€ÖŒ× ×€×Ö·× ×קש×Ö·× × ×€×× ×€Ö¿×¢××¢× ××× ××¢××× ×Š× "×§×¢×š× ×¢×¡ ×××ס" ×Š× ×§×¢× ×¢× ×š××€× ×€×× ×ַך××ס. ××֞ס ××Öž× ××ש××€× ×¢×××¢××¢ × ×Ö·××ך××¢× ×€ÖŒ×š×Öž×××¢×ס ×עש×ַס ×× ×עך××שעך. ×Öž×עך, ×עך ×€×Ö·×§× ×Ö·× ×¢×××¢××¢ ×€×× ââ×× ×¢× ×עך×× ××¢× ×€×× ×× ×Š××××Ö·× master
, ××× ×××֞ס ××× ×ע׀ך×××× ×Š× ×Š×× ×××€×××¡× ×××× ×§×Öž×, ××¢× ×¢× ×××× ×§×ַךש ×€ÖŒ××§× ××× ×× ×€×× × ××¢×××× × (××× ×עך××עך ××× ×××× ×Š××××Ö·×) ×××× ××ס××Öž××¢ ×××Öž×× × ××©× ××Öž×× ×Š×××¢××××× ×§×Ö·× ×××× ××Ö·× ×¡.
××× ×Ö·×××¢××××, ××× ××ַש××Öž×¡× ×Ö·× ×¢×¡ × ×Öž× ×××× ××× ×¢× ×Š× ×××Ö·×š×€× ×× ×€ÖŒ×š×Öž×××Ö·××××€ÖŒ, ××ס×ַסע×××Ö·× ×¢×¡ ×€Ö¿×ַך ××××× ××× ××××¢× ×Ö· × ××Ö·×¢ ××עךס××¢ ×€Ö¿×× ×§×š×Ö·×Š× ×××××š× ××××£ ע׀֌עס ׀ך×שעך ××× ×××Š× ×€Ö¿×× master
.
××¢×ת × ××עך ׊××××: TLP ××¢××Ö·××Ö·××Ö·××ש×
××× ×¢×¡×Ö·× ×¡, ××֞ס ××× × ××©× ×Ö· ×ך××Ö·×, ××× ×Ö·×××¢××××, עס ××× × ×֞ך ×Ö· ש×ך×× ×€×× ×©×Ö·×€Ö¿× ×Ö· ׀֌ך×××¢×§× ××× ×× ×Öž×× ×€×× ××Ö·× ×¥ ××ס×Ö·× ×עךס××Ö·× ××× × ×€×× ×××××¢ "××× ××× ××× ×Š× ×š×ך×?" ××× ××× ×Ö·×××¢×××× "×××¢× ××ך ××ַק×××¢× ××֞ך×?" ××× ×× ××××× ××× ××¢× ××¢×€ÖŒ×ש ׀֌ך×Öž×ך×Ö·×××× × ××× ××¢×××¢× ×Ö· ×עךע×××€×ך×××§× ×֞׀֌׊××¢, ×Öž×עך, ××¢××××× ×××¢×, ××× ××× × ××©× ×××¢×× ×Š× ×××עך×××š× ×¢×¡ ×Ö·× × ×¢×¡×ַסעך×Ö·××. ××֞ס ××Öž× ××Öž× ××× ××֞ס ××¢×××Öž×× ××Öž× ××× ××××: ×Ö·××Öž××שע ק×Öž××××ס, ××Ö·××××ס×××× ×קע ק×Öž××¢× ×עך×× ××¢× (××× × ××©× "׊×××Ö·××¢× ×©××¢×× ×ך×Ö·×€-××ַך×ַק×× ××× ×¢×¡ ××× ×Š×× ×××€×עש××¢×× (××× ×××Öž×š× ×× ××)", ××× ××× ×ס ××֞ך×××Ö·××ס ××Öž× ×Ö·××Öž× ××¢××Öž×× ×××¢×× ×¢×ע׊×, ×××× ×××ק×ק×××Öž×), ×××"××.
××¢×ת × ××עך ×ך××: ×ך××× ×××× ××× ×××סעך ×× ×Š× ××××¡× ××¢× ×€×ך×
××× ××× × ×× × ××©× ××× ××× ×Š× ××׀ך×××¢× ×€×× ××¢×, ××עך ××¢×Š× ××× ××× ××ש×××¡× ×××× × ××©× × ××׊××××× ××¢× ×××¢× ×€×× ×§××¢× ×¡×עך ××××עךש××× × ××× ×¢×¡ ×××× "××ס × ×עך××××§×¡×¢× ×¢×š", ××ס ××××¡× ×©×š×××× ×××× TCG ××¢×§×¢× × ×€×× ××××, ××× × ××©× ×Š× ××Öž×× ×Š× ××Öž×× ×©×€ÖŒ×¢×עך, "××Öž, ××֞ס ××× ×€×× ×§×ךס, ס××Öž×××, ×Öž×עך ××× ×§×¢× × ××©× ×§×Öž× ×ך×Öž×××š× ×Ö·××¥ - ××֞ס ××× ××× TCI ××× ×עשך××× ..." ×עך׊×, ××֞ס ××××עס ××¢×××¢× ××× ×Ö· ק××֞ך ××× ×עך ××Öž× ×××××× ×, ××× × ××× ×××©×¢× ×¢×š××× ×××× ×¢×š× ×§×Öž×. ×°× ××Öž×× ××¢×: â××¢× ×¢× × ××Öž× ××× ××²Ö·× ××¢××Ö·×××Ñ, ×Öž×עך × ××©× ×Ö·× ×××× ×¢×š": ×עך ק×Öž× ×××, ×€×× ×§×ךס, ×××× ×¢×š×, ×Öž×עך ק×Öž× ×ך×Öž× ×§×¢× ×¢× × ×× ×××× ×€×©×× ×ך×Ö·× ×¡×€×¢×š× ×Š× ×¢×¡ - עס ×××× ×××× ××€×ך×ש ×€ÖŒ××©× ××× ××¢× ×××¢×עךעך ×€Ö¿×ַך ××Ö·×××× ×, ך×××Ö·×××× × ××× ×Ö· ×××עך ××××€×¢×¥ ×€×× ×× JS ×××¢××, ×××֞ס × ×Öž× ××ַךף ×Š× ×¢×š××¢×¥ ×עך×××¢×°×¢× ×°×¢×š×. ×Öž×עך, ××××£ × ×֞ך××Ö·× RISC ×ַךק×Ö·×עק×שעך×, ××× ××××Ö·× ××× ××× ×€Ö¿×ַךש××××, ×Ö· ×××€ÖŒ×ש ס××××ַ׊××¢ ××× ×× × ××× ×Š× ××ַש××¢××ק ×× ×× ×¡×ך×ק×××Öž× ×§×ַש ×€Ö¿×ַך ך××××©×¢× ×¢×š××××× ×§×Öž× ××€×ך×ש - ×××× ××֞ס ××× × ××©× ×××֞ס ××ך ××ַך׀ֿ×, ××× ×§××× ×€×Ö·×, עס ××× × ×Öž×¢× ×. ××× ×Ö·××ש×Ö·×, ×€Ö¿×× ×××× ×ע׊××¢ ׀֌ך××××, ××× ××¢××¢×š× × ×Ö·× ×§×Öž× ×ך×Öž× ××× × ××©× ×ך×Ö·× ×¡×€×¢×š× ×Š× ×× ×××× ×€×× ×× ×××עך×ע׊×× × ×××֞ק, ×Ö·××× ××ך ××Öž× × ×× ××ַקע ××Ö·×š×€Ö¿× ×××עק×Öž××¢ ×× ×עך׀֌ך×Ö·××Ö·× ×€Ö¿×× ×§××× ×€×Öž××Öž, ××× ××ך ×§×¢× ×¢× ×€×©×× ×××©×¢× ×¢×š××× ×¢×¡ ×€Ö¿×× ×× ×€×× ×§×Š××¢ ××××£ ××. .
××× ××¢× ×¢× ×עק×××¢× ××× ×§×ק×
××Öž×ש ××× ×¡××ַך××¢× ×š×ך××××× × ×× ×§×Öž× ××× ××××, ×Ö· ××Ö·××ש ×ך×ק ×§×š×¢×€ÖŒ× ×ַך×××£ ×Ö·× × ×Öž×××ס×: ×××ש×Ö·×××Ö·×× ××ת××ת ×€×× GitHub ×Öž× ×§×××¢× ××× × ×Öž×××Ö·×€×ַק××ש×Ö·× × ×××¢×× ×š×¢×¡×€ÖŒ×Öž× ×¡×¢×¡ ×Š× ×ש×× ××× ×Š××¢× ×š×ק××עס, ×Öž×עך ××Öž, ×€ÖŒ××׊××× × ×עך××Öž× ×¢× ××× ×€Ö¿×Öž××¢×
××¢××Öž×× ×¢×¡ ××× ××¢×××¢× ×עך
- ××Öž× ×ש×× × ×¢×€ÖŒ×¢×¡ ×××××× ×קך××× ×Öž× ×§××× ×× ×¡××Ö·××ך×× ×
- ×××ך×××Ö·××××Ö·×××Öž× ××××£ ××֞ס, ×××, ×××× ×š×××֞ךס, ×× ××××× ×Ö·×€ÖŒ××ַק××ש×Ö·× ×××֞ס ××× ×× ×š×¢×× ×Š× ×§×Öž× ××ך ××××£ ×× ×€×××¢× ××× ×Ö· JS ××Öž××֞ך (××× ××֞ס ××ת?)
- ××¢××Ö·× ×¡×ך××ש×Ö·× ×€×× ××× ×-×ַס - ××××-×€××֞׀֌׀֌×, ××¢××××-×××, ×Ö·××¢ ××× ×× ×€×× ×€×ך××××ַךע, ×¢×ק ...
×××¢×עךעך ך×× ××××¢ ×€Ö¿×¢×֎ק××××
××× ××× ×©××× ××¢××××, QEMU ××× ×××× ×Š× ×××××××ךע×Ö·××× ×, ×Öž×עך ×עך ×××¢×עךעך ××× × ××©× ××Öž×× ×¢×¡. × ×, ××֞ס ×××, × ×× ... ××× ×¢×š×©×עך עס ××× × ××©× ×¢×§×¡×ס×××š× ××× ×Ö·××¢, ××¢××Öž×× ×××¢××××֞ךקעךס ×ך××ס - ××× ××××Ö·× ××× ××× ×€Ö¿×ַךש××××, ××֞ס ××× ×××××××ךע×Ö·××× × ×××××š× ××××£ ×Öž× ××Öž× ×××× ×€×ך××× ×Öž× ×©×¢×š× ××עך××Ö·××Ö·××. ××¢××××× ×××¢×, ××֞ס קך××××¥ ××Ö·×××××ק ׀֌ך×Öž×××¢×ס ×××¢× ×€ÖŒ×֞ך××× × ××××ס××× × ×§×Öž× ×××××š× ××××£ ×× ×©×¢×š× ××֌ך×× ××Öž××¢×. ××¢×××× , ××× ×עך ×¢×€× ×××¢× ×¢ ×ך×ק , ×× × ×¢ × ××× × ××ך×××¢×€×ך × ××¢×°×ך × ××× ×עך × × ×××¢× SharedArrayBuffers
. עס ××× ××¢×××¢× ××ס××¢×××××Ö·× ××Ö·×§×¢× ×¢× , ××× ×¡×¢××Ö·×ך××××× ×××Ö·× ×§×Ö·×עך ××× ×€×ַךש×××¢× ×¢ ×ך×Ö·××עך×, ××¢××Öž×× ××× ×¡×¢××Ö·×ך××××× ×× × ×× ××֞ך, ××× ××¢××Öž×× ××¢××××Öž××× ... × ×Öž× ×××֞ס ××× ×עק×××¢× ×Š× ×× ××¡×§× × ×Ö·× ×€ÖŒ×š×Öž×¡× ×Öž×עך ׀֌ך×Öž×¡× ×× ×Š××× ××¢×שעך××Ö·× ×, ×Öž×עך ××× ×× ××××£ ×€×× ×©×¢×š× ××֌ך×× ××× ×Ö· ×€×Öž××¢× ×× ×§×š×Ö·××Ö·× ××× × ×× ××Öž×××Ö·× ×§, עס ס ×Ö·××¢ ×× ××¢×××¢
×× ×š××¢ ש×ך×× ××× ×× ×××€ÖŒ×֞ס××××××× ×€×× × ××עך×ק-××ך×× ××Ö·× ××€ÖŒ××Ö·×××ש×Ö·× × ××× ××¢× ×Öž× ×××××: ××ך ×§×¢× ×¢× × ××©× ×€×©×× × ×¢××¢×, ך×Ö·××¢×××¢× ××¢× ×§×š×Ö·× × ×§×Öž× ××¢×§×¡× ××× ××ַש××××¢× ×Š× ×Ö· × ××Ö·×¢ ××× ×Ö· × ××Ö·×¢ ×Öž× ×××××. ×× ×š××€× ×Öž× ××××× ××× ×עך××× ×××š× ×× JS ×××ך×××Ö·× ××ַש××. עס ×××Öž×× ××סק×××¢×, ×××֞ס ××× ×× ×€ÖŒ×š×Öž×××¢×, ××× × ××ך × ×Öž× ××ַש××Öž×¡× ×Š× ×€××š× ×× ×¢×š×©××¢ ×€××Öž×× ××֞ך ××Ö·× ×××Ö·××? ×עך ×€×Ö·×§× ××× ×Ö·× ×××֞ק I / O ××× QEMU ××× ×××€ÖŒ××Ö·××¢× ×Ö·× ×××š× ×§×֞ך×Öž×××× ×, ××× ××֞ס ××× ××× × ××עך×ק-××ך×× ×Öž× ××××× ××Ö·× ××€ÖŒ××Ö·×××ש×Ö·× × ×××Öž×× ×××× × ×׊×ק. ׊×× ×××ק, Emscipten ש××× ×ÖŒ××× ×Ö· ×עק×Ö·× ×××Ö·× ×€Ö¿×ַך ××ס×× ×קך×Ö·× ×ַס ×ַ׀֌עך××ש×Ö·× ×, ××€××× ×Š××××:
××× ×עך ××Öž××¢× ×, ××× ××Öž×× × ××©× × ×Öž× ×עך××× ×Š× ×©×€ÖŒ×Ö·××× ××¢× ×§×Öž× ××× ×××× ×§×Ö·××€ÖŒ×××× ××× WASM ××× ×× ×עך׀֌ך×Ö·××Ö·× × ××Š× Emterpreter, ×Ö·××× ×××֞ק ××¢×××סעס ××Öž× × ×× ×ַך××¢× × ×Öž× (××¢× ××× ×עך ××××Ö·×עך סעך××¢, ××× ××× ××Öž×× ...). ×Ö·× ×××, ××× ×× ×¡××£ ××ך ××Öž× ××ַק×××¢× ×¢×€ÖŒ×¢×¡ ××× ××¢× ××Öž×× ×¢ ××××¢×š× ××Ö·×:
- ×× ×עך׀֌ך×Ö·××Ö·× ×××֞ק ××× / ×Öž. × ×, ××Öž× ××ך ××ַקע ×עך×××ַך×× ×¢×××Ö·×××××× NVMe ××× ××¢××××š× ×€×֞ךש××¢××× ×? ð
- ס××Ö·××ק×× ×§×Ö·××€ÖŒ×××× ××××€ÖŒ× QEMU ק×Öž× (×××עך×ע׊עך, ×× ×עךע ×¢×××Ö·×××××× ××¢×××סעס, ×××"× ×)
- ××× ×Ö·××ק×Ö·××× ×§×Ö·××€ÖŒ×××× ××Ö·×¡× ×§×Öž× ××× WASM
×€Ö¿×¢×֎ק×××× ×€×× QEMU ק×××××
××× ××ך ××ס××Öž××¢ ש××× ×עס×, ×× ×§×Öž× ×€Ö¿×ַך ×¢×××Ö·×××××× × ××Ö·×¡× ×ַךק×Ö·×עק××©×¢×š× ××× ×× ×§×Öž× ×€Ö¿×ַך ×××©×¢× ×¢×š××××× × ××Ö·××¢××֞ס ××ַש×× ×× ×¡×ך×ַקש×Ö·× × ××¢× ×¢× ××€×עש×××× ××× QEMU. ××× ×€×ַק×, עס ××× ××€××× ×Ö· ×××¡× ×ך×ק×עך:
- עס ××¢× ×¢× ××Ö·×¡× ×ַךק×Ö·×עק×שעך×
- עס ×× ×€×ַך×Ö·× ×ַקסע×עך×××עך×, × ×××××, KVM ×€Ö¿×ַך ××Ö·×× ×××Ö·×š× ×××ך×××Ö·××××Ö·×××Öž× ××××£ ××× ×קס (×€Ö¿×ַך ××Ö·×¡× ××× ××Ö·××¢××֞ס ס×ס××¢××¢× ×§×Ö·××€ÖŒ×Ö·××Ö·××Ö·× ××× ××¢×עך ×× ×עךעך), TCG ×€Ö¿×ַך ××ש×× ×§×Öž× ××ך עך××¢×¥. ס××ַך××× × ××× QEMU 2.9, ש×××Š× ×€Ö¿×ַך ×× HAXM ××Ö·×× ×××Ö·×š× ×××ך×××Ö·××××Ö·×××Öž× × ×֞ך××Ö·× ××××£ Windows ×ך××ס (
×× ××¢××Ö·××ס ) - ×××× TCG ××× ××¢× ××Š× ××× ××× ××Ö·×× ×××Ö·×š× ×××ך×××Ö·××××Ö·×××Öž×, עס ××× ×Ö· ××Ö·××× ×עך ק×Öž× ××ך ש×××Š× ×€Ö¿×ַך ××¢×עך ××Ö·××¢××֞ס ×ַךק×Ö·×עק×שעך, ××× ××¢××× × ××× ×€Ö¿×ַך ×× ×× ×××עךס×Ö·× ××עך×ע׊עך
- ... ××× ×ַך×× ×Ö·××¢ ××¢× - ×¢×××Ö·×××××× ×€ÖŒ×¢×š×׀עך×Ö·×ס, ××Ö·× ×׊עך ׊×××× ×, ×××ך×Ö·×××Öž×, ךעק×֞ך×-ך××€ÖŒ×××, ×¢×ק.
×××, ××× ××ך ×××ס×: QEMU ×§×¢× ×¢× ×¢×××Ö·×××× × ×× ××××× ×× ××× ×Š×¢ ק×Öž××€ÖŒ×××עך, ×Öž×עך ×××× ×× ×€ÖŒ×š×ַסעסעך ×€Ö¿×ַך ×Ö· ××Ö·××× ×עך ××Ö·× ×׊עך ׀֌ך×֞׊עס ××× ×עך ××Ö·××¢××֞ס קעך×, ×××֞ס ××× ××¢× ×׊×, ××ש×, ×××š× ×× AFL Fuzzer ×€Ö¿×ַך ×××× ×¢×š× ×× ×¡×ך×Ö·××¢× ×××ש×Ö·×. ××Öž×עך ×¢×ע׊עך ×××Öž×× ××× ×Š× ×ַך××עך׀××š× ××¢× ××Öž××¢ ×€×× ââ×֞׀֌עך×ַ׊××¢ ×€×× ââQEMU ×Š× JS? ð
××× ×š××Ö¿ ××Ö·× ×-ש××××¢× ××ק ׀ך×× ××××××××ך×, QEMU ××× ××¢×××× ×××š× ×× ×š××€× configure
О make
. ××× ×¡ ××Öž×× ××ך ××ַש×××¡× ×Š× ××××× ×¢×€ÖŒ×¢×¡: ×Ö· TCG ××Ö·×§×¢× ×, ×€×Öž××¢× ×××€ÖŒ××Ö·××¢× ×××ש×Ö·×, ע׀֌עס ×Ö·× ×עךש. ×× ××××¡× × ××©× ×§×Ö·××ש ×Š× ×××× ×Š×׀ך××× / ××֞ך×Ö·×€××× (×× ×עך×××× ××× ×Š×× ×¢××¢×) ××× ×× ××סק×ק ×€×× ×§×Ö·×××× ×ַק××××× × ××× ×Ö·×××֞ק×Öž× ×£ - ××× ×€×ַק×, configure
QEMU ס ××× ×ש××¢×ת ×××-×עשך××× ××× ××× × ××©× ×××©×¢× ×¢×š××××Ö·× ×€×× ×¢×€ÖŒ×¢×¡.
×××¢××ַססע××××
×Ö·××× ×××֞ס ××× ×× ××Ö·× ×עך××€× ×××¢××ַססע×××× (×ַק×Ö· ×××ַס×)? ××֞ס ××× ×Ö· ×€×ַך×××Ö·× ×€Ö¿×ַך Asm.js, × ×× ×עך ׀֌ך×××¢× ××× × ×Š× ×××× ×××××ק ××ש×Ö·×××ַסקך××€ÖŒ× ×§×Öž×. ××××£ ×× ×€×ַךקעך×, עס ××× ×š××× ×××× ×¢×š× ××× ×Öž×€ÖŒ××××××¢×, ××× ××€××× ×€×©×× ×©×š××Ö·×× ×Ö· ××Ö·× ×¥ × ××עך ××× ×¢×¡ ××× × ××©× ×××עך ׀֌ש××: ×€Ö¿×ַך ק×Ö·××€ÖŒ×ַק×× ×ַס, עס ××× ×¡××Öž×š× ××× ××¢× ×€Ö¿×֞ך××Ö·×.
××ך ×§×¢× ××Öž×× ××¢××¢×š× ×××¢×× ×× ×š×¢××Öž×€ÖŒ×× × ×Ö·××עך×××Ö·× ×€Ö¿×ַך Asm.js - ××֞ס ××× ×× ×š×¢×¡×עך××ש×Ö·× ×€×× "××××-××ך××" ××××€× ×§×Öž× ×ך×Öž× ××× ×¡×ך×ק׊×עס (××֞ס ×××, ××××-××¢××Öž×× ×Ö·× ×עךש, ××׀֌ס, ×××"× ×), ×€Ö¿×ַך ×××֞ס JS ×¢× ××ש×Ö·× × ××¢× ×¢× ×××××× ×, ×€Ö¿×× ×× × ××עך×ק-××ך×× LLVM IR, × ×¢×¢× ×עך ×Š× ×× ××ַש×× ×§×Öž× ×¢×§×¡×ַק××××Ö·× ×××š× ×× ×€ÖŒ×š×ַסעסעך. ××¢××××× ×××¢×, ×× ×× ×עך×××××× ×€×ַך×ךע××× × ×€×× QEMU ××× × ×¢×¢× ×עך ×Š× ×× ×š××¢. עס ×××Öž×× ××סק×××¢× ×Ö·× ××Öž עס ×××, ×××עק×Öž××¢, ×עך ס××£ ×€×× ×× ××Ö·××¢×š× ... ××× ××¢××Öž×× ×¢×¡ ××¢× ×¢× ×××ַקס, ××××-××¢××Öž××-×Ö·× ×עךש ××× ××׀֌ס!..
××× ××֞ס ××× ×× ×× ×עך ס××× ×××֞ס Binaryen ××× × ×׊×ק: עס ×§×¢× ×¢× ××¢××××× ×××¢× ×Öž× × ×¢××¢× ××××-××ך×× ×××ַקס × ×Öž×¢× × ×Š× ×××֞ס ×××Öž×× ×××× ×¡××Öž×š× ××× WASM. ×Öž×עך עס ×§×¢× ×¢× ×××× ×€ÖŒ×š×Öž××׊××š× ×§×Öž× ×€×× ×Ö· ×ך×Ö·×€×ק ×€×× ×קעך××ק ×××ַקס ××× ×ך×Ö·× ××ש×Ö·× × ×Š××××©× ×××. × ×, ××× ××× ×©××× ××¢×××× ×Ö·× ×¢×¡ ××××× ×× ×××¢××ַססע×××× ×¡××֞ך×××ש ×€Ö¿×֞ך××Ö·× ××× ×עך ×× ××ַק×××¢× C / C ++ ×Ö·×€ÖŒ×.
TCG (Tiny Code Generator)
GTC tcg_qemu_tb_exec
, עס ××× ××¢×××¢× ×××עך × ×׊×ק ×€Ö¿×ַך ××ך.
×Š× ××××× ×Ö· × ××Ö·×¢ TCG ××Ö·×§×¢× × ×Š× QEMU, ××ך ××Ö·×š×€Ö¿× ×Š× ×©×Ö·×€Ö¿× ×Ö· ס××××ךעק××Öž×š× tcg/<ÐžÐŒÑ Ð°ÑÑ
ОÑекÑÑÑÑ>
(××× ××¢× ×€×Ö·×, tcg/binaryen
), ××× ×¢×¡ ×ÖŒ××× ×Š×××× ×עקעס: tcg-target.h
О tcg-target.inc.c
О configure
. ××ך ×§×¢× ×¢× ×©××¢×× ×× ×עךע ×עקעס ××֞ך×, ×Öž×עך, ××× ××ך ×§×¢× ×¢× ××š×¢×€× ×€Ö¿×× ×× × ×¢××¢× ×€×× ×× ×Š××××, ××× ×××¢×× ×××××¢ ×××× ×ַך××Ö·× ×עךע×× × ×¢×š××¢×¥: ×××× ×¢×š ××× ×Ö· ךע×××עך ××¢×עך ×עקע (עס ××× ×ַך××Ö·× ×עךע×× × ××× tcg/tcg.h
, ××× ×Ö·× ×××× ×¢×š ××× ×©××× ××× ×× ×עךע ×עקעס ××× ×× ××ךעק×עך×× tcg
, accel
××× × ×× ×××××), ×× ×× ×עךע - ××××× ××× ×Ö· ק×Öž× ×¡× ××€ÖŒ×Ö·× ××× tcg/tcg.c
, ×Öž×עך עס ××× ×ַקסעס ×Š× ×××Ö·× ×¡××Ö·××ק ×€×Ö·× ×קש×Ö·× ×.
××× ××ַש××Öž×¡× ×Ö·× ××× ×××Öž×× ×€×ַך××š×¢× ××¢× ×Š× ×€×× ×Š××× ××××£ ××××××× ×× ××עס××Ö·×××ש×Ö·× × ×€×× ××× ×¢×¡ ×ַך××¢×, ××× ×€×©×× ×§×Ö·×€ÖŒ×× ×× "סקע××¢××Öž× ×¡" ×€×× ×× ×Š×××× ×עקעס ×€Ö¿×× ×× ×× ×עך ××Ö·×§×¢× × ×××€ÖŒ××Ö·××¢× ×××ש×Ö·×, ××Öž× ×¢×¡××× ×× ××ַק××××× × ××¢× ××× ×× ×עך×××××¢× ×ש ××¢×עך.
×עקע tcg-target.h
×ÖŒ××× ×עך ××××€ÖŒ× ×¡×¢×××× ×ס ××× ×× ×€×Öž×š×¢× #define
-ס:
- ××× ×€×××¢ ךע××ש×ס××¢×š× ××× ×××֞ס ×ך××× ××¢× ×¢× ××××£ ×× ×Š×× ×ַךק×Ö·×עק×שעך (××ך ××Öž×× ××× ×€×××¢ ××× ××ך ×××××, ××× ×€×××¢ ××× ××ך ××××× - ×× ×§×©×× ××× ×עך ×××¢×× ×××֞ס ×××¢× ×××× ×××©×¢× ×¢×š××××Ö·× ××× ×עך ע׀עק×××× ×§×Öž× ×××š× ××¢× ×××¢×עךעך ××××£ ×× "××Ö·× ×¥ ׊××" ×ַךק×Ö·×עק×שעך ...)
- ×Ö·×××× ××Ö·× × ×€×× ××Ö·××¢××֞ס ××× ×¡×ך×ק׊×עס: ××××£ קס 86 ××× ××€××× ××× TCI, ××× ×¡×ך×ק׊×עס ××¢× ×¢× × ××©× ×Ö·×××× × ××× ×Ö·××¢, ×Öž×עך ××× ×××¢× ×©××¢×× ××× ×× ×§×Öž× ××ַ׀עך × ××©× ××× ×¡×ך×ק׊×עס ××× ×Ö·××¢, ×Öž×עך ×Öž× ××××Ö·× ×Š× Binaryen ××××××Öž×עק ס×ך×ַק×שעך×, ×Ö·××× ××× ×××¢× ××Öž××: 4 ×××עס
- ×××֞ס ×ַ׀֌ש×Ö·× ×Ö·× ××× ×¡×ך×ק׊×עס ×× ××Ö·×§×¢× × ×§×¢× ×¢× ×××©×¢× ×¢×š××× - ××ך ×ַך××Ö·× × ×¢××¢× ×Ö·××¥ ××ך ××¢×€Ö¿×× ×¢× ××× Binaryen, ××Öž×× ×× ×ַקסע×עך×Ö·××֞ך ×ךע×× ×× ×× ××× ××× ×¡×××€ÖŒ×עך ×Öž× ×¢×¡ ×××
- ×××֞ס ××× ×× ××¢×š× ×¢× ××¢×š× ×ך××ס ×€×× ×× TLB ק×ַש ××¢××¢×× ×××š× ×× ××Ö·×§×¢× ×. ×עך ×€×Ö·×§× ××× ×Ö·× ××× QEMU ×Ö·××¥ ××× ×¢×š× ×¡×: ××Öž×ש עס ××¢× ×¢× ××¢×׀֌עך ×€×Ö·× ×קש×Ö·× × ×××֞ס ××ך××€××š× ××ַסע / קך×Öž× ××¢× ×××¢× ××× ×ש××× ×× ××Ö·×¡× MMU (×××× ×××Öž×× ××ך ×××× ×Öž× ×¢×¡ ××׊×?), ××× ×š×Ö·××¢×××¢× ×××עך ×××עך×ע׊×× × ×§×ַש ××× ×× ×€×Öž×š×¢× ×€×× ×Ö· ס×ך×ק××ך, ×× ×€ÖŒ×š×ַסעס×× × ×€×× ×××֞ס ××× ××ַק×××¢× ×Š× ××××¢× ××××Ö·× ××× ×ך×Öž×ק×Ö·×¡× ×××ַקס. ×× ×§×©×× ×××, ×××֞ס ×€×Öž××Öž ××× ××¢× ×¡×ך×ק××ך ××× ××¢×š×¡× ××€×ש×Ö·× ××× ×€ÖŒ×š×Ö·×¡×¢×¡× ×××š× ×Ö· ק×××× ××× ×©× ×¢× ×¡×ק×××Ö·× ×¡ ×€×× ×§×Ö·××Ö·× ××?
- ××Öž ××ך ×§×¢× ×¢× ××××ק ×× ×Š×× ×€×× ×××× ×Öž×עך ׊×××× ×š×¢×עך××××š× ×š×¢××ש×ס×עך×, ××¢×× ×× ×š××€× ×××š× ×Ö· ×€Ö¿×× ×§×Š××¢ ××× ×Öž×€ÖŒ×××Öž× ×Ö·××× ××ַשך××Ö·×× ×¢×××¢××¢ ק××××
inline
-×€×× ×§×Š×עס ×××flush_icache_range
(×Öž×עך ××֞ס ××× × ××©× ××× ××עך ×€×Ö·×)
×עקע tcg-target.inc.c
, ×€×× ×§×ךס, ××× ×××ש×Ö·×××Ö·×× ×€×× ×ךעסעךע ××× ×ך××ס ××× ×ÖŒ××× ×¢×××¢××¢ ××Ö·× ××Ö·××Öž×š× ×€×Ö·× ×קש×Ö·× ×:
- ×× ××××Ö·××××Ö·×××Öž×, ×ַך××Ö·× ×עךע×× × ×š×ס×ך×קש×Ö·× × ××××£ ×××֞ס ×× ×¡×ך×ַקש×Ö·× × ×§×¢× ×¢× ×ַך××¢×× ××××£ ×××֞ס ×֞׀֌עך×Ö·× ××. ××××××Ö·× ××× ×§×Ö·×€ÖŒ×× ×××š× ××ך ×€×× ×× ×× ×עך ××Ö·×§×¢× ×
- ×€×× ×§×Š××¢ ×××֞ס × ×¢×× ×××× ×× ×¢×š××¢× ×××עק×Öž××¢ ××××¢×
- ××ך ×§×¢× ×¢× ×××× ×©××¢×× ×Ö·××××××¢×š× ×€×Ö·× ×קש×Ö·× × ××Öž, ××× ××ך ×§×¢× ×¢× ×××× × ××Š× ×¡××Ö·××ק ×€×Ö·× ×קש×Ö·× × ×€Ö¿××
tcg/tcg.c
×€Ö¿×ַך ×××, ××× ×××ס×עך×××××× ×× ×€××××¢× ××¢ ס×ך×Ö·××¢×××¢: ××× ×× ×¢×š×©×עך ××עך×עך ×€×× ×× ××××Ö·×עך ×××עך×ע׊×× × ×××֞ק, ××× ×עשך××× ×€×ך ×€ÖŒ××× ×עך×: ×Ö· ×Öž× ×××× ×Š×××× (×Ö· ×××עך ×××¢×š× ××× ×עך ××¢×× × 0xFFFFFFFF
, ×××֞ס ××ש×××¡× ×× ×§×š×Ö·× × ×©××Ö·× ×€×× ×× ××), ק×Öž× ×עקס×, ×××©×¢× ×¢×š××××Ö·× ××Öž××××¢ ××× ××Ö·××ש × ××עך ×€Ö¿×ַך ××××Ö·××× ×. ××× ×¢×š×©×עך ×× ××ַךק ××× ××¢×××¢× ×©××¢×× ××× 0xFFFFFFFF - n
××× n
- ×Ö· ק×××× positive × ××עך, ××× ××¢×עך ××Öž× ×¢×¡ ××× ××¢×××¢× ×¢×§×¡×ַק××××Ö·× ×××š× ×× ××עך×ע׊עך עס ××¢××××§×¡× ××× 1. ×××¢× ×¢×¡ ך×××©× 0xFFFFFFFE
, ××Ö·×××× × ××× ×€×ך×עק×××¢×, ×עך ××Öž××××¢ ××× ×עך×××¢×××¢× ××× ×× ×€×× ×§×Š××¢ ××ש, ×××€ÖŒ×֞ך××× ××× ×Ö· ק×××× "××Ö·×× ×שעך", ××× ×××֞ס ×× ××ך××€×ך×× × ××× ××¢×××¢× ×€Ö¿×× tcg_qemu_tb_exec
, ××× ×עך ××Öž××××¢ ××× ×Ö·××עק××¢× ×××¢× ×€×× QEMU ××֌ך××.
×Š× ×€ÖŒ×ַך×ַ׀ך×Ö·× ×× ×§××ַס×קס, "קך××ש, ××× ×€×× ××× ×× ×עך×××××× × ××× ××¢× ××¢××× × ×€Ö¿×ַך ×× ×€ÖŒ×š×Öž×עך ס ××ַךץ ...". ×Öž×עך, ×עך ××֌ך×× ××× ××¢×××¢× ××ק×× × ×¢×š××¢×¥. ×עך׊×, עס ××× ××¢×××¢× ××ק×Öž×š× ×עך××× ×××š× QEMU! ××× ××× ××¢××× × ×§××× ×× ×××¢× ××¢× ×©×š×××× ×× ×§×××¢× ××××¢ ××× ×¡×ך×ק׊××¢ (× ×, ××ס ××××¡× × ×Š×××עך) ××× ××¢× ×××ס××¢××¢×§× ××¢× ×××ס ×××× ××× ×§ ××× ××¢×××¢× ×€×š×עך ××××£ ××¢× ×€×××¥, ××עך ××ס ××× × ××©× ××¢××××€×. ×ַק×××Ö·×××, ××× ×× ×¡×××€ÖŒ××Ö·×¡× ×€×Ö·×, QEMU ×Ö·××ַק×××¥ ××֌ך×× ××× ×¡××ַך××Ö·×€ÖŒ ××× ×©×š×××× ×× ×××©×¢× ×¢×š××××Ö·× ×§×Öž× ××֞ך×. ×××¢× ×עך ××ַ׀עך ××××€× ×××ס, ×× ×§×Öž× ××× ×ך×× ××¢××××š×€× ××× ×עך ××××Ö·×עך ×××× ×¢×š ××××× ×Š× ×××× ×עשך××× ××× ×××Ö·× ×֞ך×.
× ×Öž× ××¢××¢×š× × ××¢× ×§×Öž×, ××× ×××× ××¢××¢× ×Ö·× ×עך ק×× ×¥ ××× ×× ××Ö·××ש × ××עך עך××××× ××ך × ××©× ×Š× ×€×ַך××Öž×× ××××£ ק×׀֌ע ׊עש×עך×× × ×××š× ×€×š×× ×¢×€ÖŒ×¢×¡ ×€×Ö·×ש ××××£ ×Ö· ×Ö·× ×× ×ש××Ö·××××× ××ַ׀עך ××××£ ×עך עךש×עך ×€×֞ך×. ××עך ××עך ך×ך××× ×× ××ַ׀עך ×Š× ××××€ÖŒ×ַס ×××× ×€Ö¿×× ×§×Š××¢ ש׀֌ע×עך? ××× ×× ×¢×סקך××€ÖŒ××¢× ××¢×××¢××֞׀֌עךס ךעק×Öž××¢× ××ך×, ×××¢× ××× ××¢×××€× ××× ×Ö· ׀֌ך×Öž×××¢×, ××× ×ך×Ö·× ×¡×€ÖŒ×֞ך××Ö·× ×× ×š×××Ö·×××× × ×§×Öž× ×Š×ך×ק ×Š× ×× ××¢××××š× ×Ö·×€ÖŒ××ַק××ש×Ö·×, ש××¢×× ××Öž×××××Ö· ךעק×֞ך×-ךע׀֌×××Ö· ××××£ עס ... ××× ×Ö·×××¢××××, ××× ×× ×¡××£ ××× ×××× ××¢××¢× ×Ö· ׀֌ש×× ××Ö·×: ×€Ö¿×ַך ××¢×עך ×××֞ק, × struct TranslationBlock
××× ×××Ö·× ××ַשך××Ö·××× ×. ××š×¢×€× ××× ... ×Ö·× ×¡ ךע××, ×€ÖŒ×× ×§× ××××עך ×× ×××֞ק ךע×× ××× ×× ××ַ׀עך. ××× ××Öž× ××֞ס ×××× ××¢××¢×, ××× ××ַש××Öž×¡× ×Š× ×€×ַך××Öž×× × ××Š× ×§×š×Ö·×ש×× (××€ÖŒ××ת ×¢×××¢××¢), ××× ×€×©×× ×××Ö·×š×€× ×××ס ×× ××Ö·××ש × ××עך, ××× ×ך×Ö·× ×¡×€×¢×š× ×× ×š××¢× ××עך×עך ×Š× struct TranslationBlock
, קך×××××× × ×Ö· ×××× ××× ××§× ×š×©××× ×××֞ס ×§×¢× ×¢× ×××× ×עש×××× × ××ך×××¢××× ××¢× ×××¢× ×× ×××עך×ע׊×× × ×§×ַש ××× ××ַש××¢××ק, ××× ×€×š×× ××ק×֞ך×.
×¢×××¢××¢ קך×Ö·×ש×× ××××Ö·××: ×€Ö¿×ַך ×××ַש׀֌××, ×× ×ע׊×××× × ×€ÖŒ××× ××¢×š× ××× ×× ×§×Öž× ××ַ׀עך - ×¢×××¢××¢ ×€×× ââ××× ××¢× ×¢× ×€×©×× BinaryenExpressionRef
, ××֞ס ×××, ××× ×§××§× ××× ×× ×××ס×ך××§× ×××֞ס ××Ö·×š×€Ö¿× ×Š× ×××× ××× ×¢×ַך×× ×©××¢×× ××× ×× ×××©×¢× ×¢×š××××Ö·× ×קעך××ק ×××֞ק, ×××× ××× ×עך ׊×ש××Ö·× × ×€Ö¿×ַך ××עך××Ö·× × ×Š××××©× BBs, ×××× ××× ××× ×Š× ××××. × ×, עס ××¢× ×¢× ×©××× ×Š×××¢×ך××× ×××ַקס ×€Ö¿×ַך ךע××֞׀֌עך ×××֞ס ××Ö·×š×€Ö¿× ×Š× ×××× ×€×ך××× ×× ×××× ×× ××××× ××× ××¢×. ×Š× ××ס××××× ×××, ×× ××ַש×֞ךע ××× ××¢× ××Š× ×Ö·× ××× ××¢× ×¢× ×Ö·××¢ ×Ö·×××× × ××× ×××Ö· ××× ×ס×עך ×€×ך ×××עס, ×Ö·××× ××ך ×§×¢× ×¢× ×עש×Öž××¢× × ××Š× ×× ×§××¢× ×¡×עך ××Ö·×××××ק ׊×××× ×××× ×€Ö¿×ַך ×× ×€×ך××¢, ××ך × ×֞ך ××Ö·×š×€Ö¿× ×Š× ××¢××¢× ×§×¢× ×Š× ××Ö·×××Ö·×××§× ×¢×¡ ×××× × ××××ק. ×××š× ××¢× ×××¢×, ×Ö·××Ö· ××Ö·××¢×ס ××¢× ×¢× ×©××× ××¢× ××Š× ××× QEMU ×Š× ×Öž× ××××Ö·×× ×× ×¡××× ×€Ö¿×ַך ×ַך××ס××Ö·× × ×× TCG ש××××£.
× ××Š× Binaryen
××Öž×××עס ××× ×××¢××ַססע×××× ×Ö·× ×××Ö·××× ×€×Ö·× ×קש×Ö·× ×, ××¢×עך ×€×× ×××֞ס ×ÖŒ××× ×Ö· ×××£, ×××֞ס ××× ×Ö·× ×××ס×ך×ק. עקס׀֌ךעסס××Öž× ×¡ ××¢× ×¢× ×× ×Ö·×š× ××× ×××× ×¢×š× ×ַ׀֌עך××ש×Ö·× ×, ×××ַקס ק×Ö·× ×¡×ס××× × ×€×× ×š×©×××ת ×€×× ×× ×עךע ×××ס×ך×ק×, ק×Öž× ×ך×Öž× ××××€×, ×××"× ×. ××× ××× ×©××× ××¢××××, ק×Öž× ×ך×Öž× ××××€× ××Öž ××× ×֞ך××Ö·× ××××š× ×€ÖŒ×× ×§× ××× ××××-××ך×× ×Š××××××, ××׀֌ס, ×€Ö¿×× ×§×Š××¢ ך××€×, ×××"× ×. ×ַך××××¢× ×× ×Š× ×€×Ö·× ×קש×Ö·× × ××¢× ×¢× × ××©× ××ך×××¢××× ××¢× ××××£ ×× ×Öž× ×××××, ×Öž×עך ××€×ך×ש, ×€ÖŒ×× ×§× ××× ××× JS. עס ××¢× ×¢× ×××× ×××××××¢ ××עך××Ö·××Ö·××, ×Öž×עך ××× ××Öž×× × ××©× ××¢××××× × ×××, ×Ö·××× ××× ×××¢× × ××©× ××Öž×× ××ך ×××¢×× ×××.
×€×Ö·× ×קש×Ö·× × ×××× ××Öž×× ××××¢ ××עך××Ö·××Ö·××, ×ע׊×××× ×€Ö¿×× × ××, ×€×× ×××€ÖŒ: int32 / int64 / float / double. ××× ××¢× ×€×Ö·×, ×עך עךש×עך n ××××¢ ××עך××Ö·××Ö·×× ××¢× ×¢× ×× ×ַך××××¢× ×× ××ך×××¢××× ××¢× ×Š× ×× ×€Ö¿×× ×§×Š××¢. ××××¢ ××Öž× ×Ö·× ××Öž×ש ×Ö·××¥ ××Öž ××× × ××©× ××֞ך × ××עך×ק-××ך×× ××× ×עך××× ×¢× ×€×× ×§×Öž× ×ך×Öž× ××××€×, ×× ××Ö·×××©×¢×š× × ×Öž× ××Öž× × ×× ××Öž×× ×× "××¢×ת××¢× / ×Ö·× ×¡××× ×" ×Ö·×ך×××××: ××× ×× × ××עך ×××××××× ××¢×€ÖŒ×¢× ×ס ××××£ ×× ×֞׀֌עך×ַ׊××¢ ק×Öž×.
××× ×Ö·×××¢××××, Binaryen ×××
×Öž×עך, ×××× ××ך ××××× ×Š× ×××Ö·××©× ×§×Öž× ××××£ ×× ×€×××¢× ×Öž× ××× ××××ק ש×Ö·×€×× × ××× ××××ש×Ö·× ×€×× ×Ö· ××עך×ע׊עך ×××ַש׀֌××, עס ×§×¢× ×××× ××× ×¢× ×Š× ×©××¢×× ××¢× ××Öž××ק ××× ×Ö· C ++ ×עקע, ××× ×€Ö¿×× ××Öž×š× ××××Ö·× ×€××š× ×× ××× ×Š×¢ C ++ API ×€×× ×עך ××××××Öž×עק, ××××€ÖŒ×ַס×× × ×ך×××- ××¢×××× ×š×ַ׀֌עך×.
×Ö·××× ×Š× ×××©×¢× ×¢×š××× ×× ×§×Öž× ××ך ××ַך׀ֿ×
// МаÑÑÑПОÑÑ Ð³Ð»ÐŸÐ±Ð°Ð»ÑÐœÑе паÑаЌеÑÑÑ (ЌПжМП пПЌеМÑÑÑ Ð¿ÐŸÑПЌ)
BinaryenSetAPITracing(0);
BinaryenSetOptimizeLevel(3);
BinaryenSetShrinkLevel(2);
// ÑПзЎаÑÑ ÐŒÐŸÐŽÑлÑ
BinaryenModuleRef MODULE = BinaryenModuleCreate();
// ПпОÑаÑÑ ÑÐžÐ¿Ñ ÑÑМкÑОй (как ÑПзЎаваеЌÑÑ
, Ñак О вÑзÑваеЌÑÑ
)
helper_type BinaryenAddFunctionType(MODULE, "helper-func", BinaryenTypeInt32(), int32_helper_args, ARRAY_SIZE(int32_helper_args));
// (int23_helper_args пÑОПб^WÑПзЎаÑÑÑÑ ÐŸÑЎелÑМП)
// ÑкПМÑÑÑÑОÑПваÑÑ ÑÑпеÑ-Ќега вÑÑажеМОе
// ... ÐœÑ ÑÑÑ Ñж Ð²Ñ ÐºÐ°Ðº-МОбÑÐŽÑ ÑаЌО :)
// пПÑПЌ ÑПзЎаÑÑ ÑÑМкÑОÑ
BinaryenAddFunction(MODULE, "tb_fun", tb_func_type, func_locals, FUNC_LOCALS_COUNT, expr);
BinaryenAddFunctionExport(MODULE, "tb_fun", "tb_fun");
...
BinaryenSetMemory(MODULE, (1 << 15) - 1, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
BinaryenAddMemoryImport(MODULE, NULL, "env", "memory", 0);
BinaryenAddTableImport(MODULE, NULL, "env", "tb_funcs");
// запÑПÑОÑÑ Ð²Ð°Ð»ÐžÐŽÐ°ÑÐžÑ Ðž ПпÑОЌОзаÑÐžÑ Ð¿ÑО желаМОО
assert (BinaryenModuleValidate(MODULE));
BinaryenModuleOptimize(MODULE);
... ×××× ××× ×€×ך××¢×¡× ×¢×€ÖŒ×¢×¡, ×× ×ש××××××, ××֞ס ××× × ×֞ך ×Š× ×€×֞ךש××¢×× ×× ×××Öž×, ××× ×× ××¢××Ö·××ס ××¢× ×¢× ××× ×× ××ַק××××¢× ×××ש×Ö·×.
××× ×××Š× ××××× ××× ×× ×× ×§×š×ַק-׀עקס-׀֌עקס, ע׀֌עס ××× ××֞ס:
static char buf[1 << 20];
BinaryenModuleOptimize(MODULE);
BinaryenSetMemory(MODULE, 0, -1, NULL, NULL, NULL, NULL, NULL, 0, 0);
int sz = BinaryenModuleWrite(MODULE, buf, sizeof(buf));
BinaryenModuleDispose(MODULE);
EM_ASM({
var module = new WebAssembly.Module(new Uint8Array(wasmMemory.buffer, $0, $1));
var fptr = $2;
var instance = new WebAssembly.Instance(module, {
'env': {
'memory': wasmMemory,
// ...
}
);
// О Ð²ÐŸÑ Ñже Ñ Ð²Ð°Ñ ÐµÑÑÑ instance!
}, buf, sz);
××× ×¡×ך ×Š× ×¢×€×¢×¡ ×€×ַך××× ×× ×× ×××¢××× ×€×× QEMU ××× JS ××× ××× ×עך ××¢×××קעך ׊××× ×עש×××× × ×ַקסעס ×× ×§×Ö·××€ÖŒ×××× ×€×Ö·× ×קש×Ö·× ×, ×Ö· ××¢× ××¢ ××× ××ש××€× (×Ö· ××ש ×€×× ×€×Ö·× ×קש×Ö·× × ×€Ö¿×ַך ×ַך××Ö·× ×€×ך ××× ×× ××Öž× ×שעך), ××× ×× ×××©×¢× ×¢×š××××Ö·× ×€×Ö·× ×קש×Ö·× × ××¢× ×¢× ×עש××¢×× ××֞ך×. ×Š× ×עש×××× × ×š×¢××¢× ×¢× ×× ××× ×עקס, ×עך ××× ×עקס ×€×× ×× × ×× ×××Öž×š× ×××עך×ע׊×× × ×××֞ק ××× ××××עס ××¢× ××Š× ××× ×¢×¡, ×Öž×עך ××¢××Öž×× ×עך ××× ×עקס ק×Ö·×ק××Ö·×××××× ××× ××¢× ×€×֞ך××××¢ ×× ××¢××××× ×Š× ×€×©×× ×€ÖŒ×ַס×ק ××× ×× ×€×¢×× ××× struct TranslationBlock
.
×××š× ×× ×××¢×,
×Ö·× ×¡ ×Ö·××¢ ×€Ö¿×ַך ××׊×. ××Öž×עך עס ×××¢× ×××× ×× ×× ×עך ×ַך×××§× ×××× ×¢×ע׊עך ××× ××× ×עךעס×ך×. × ×Ö·××¢××, עס ×××××× ×××Ö· ××× ×ס×עך ××××× ××Ö·×× ×××֞ק ××¢×××סעס ×ַך××¢×. עס ×§×¢× ×××× ××Ö·×× ××× ×¢× ×Š× ××Ö·×× ×× ××Ö·×××× × ×€×× ×××¢××ַססע×××× ××Ö·××ש××× ××ס×× ×קך×Ö·× ×ַס, ××× ××× ×§×ַס××Ö·××¢×š× ××× ×× JS ×××¢××, ××××Ö·× ×¢×¡ ××× × ×Öž× ×Ö·× ××עך×ע׊עך ×××֞ס ×§×¢× ×¢× ××Öž× ××֞ס ×Ö·××¥ ××× ×× ××¢××××š× ××Öž××××¢ ××× ×ך×××.
׊×× ×¡××£ ×Ö· ךע××¢× ×ש: ××ך ××Öž× ×Š×× ×××€×עש××¢×× ×Ö· ×××× ×¢×š× ××××£ ×Ö· 32-×××¡× ×ַךק×Ö·×עק×שעך, ×Öž×עך ×× ×§×Öž×, ×××š× ××֌ך×× ×ַ׀֌עך××ש×Ö·× ×, ק××××× ×€Ö¿×× Binaryen, עך××¢×¥ ××××£ ×× ×Öž× ××××× ×Öž×עך עך××¢×¥ ×Ö·× ×עךש ××× ×עך ××××עךש×עך 2 ×××××××× ×€×× ×× 32-×××¡× ×Ö·×ךעס ×€ÖŒ××Ö·×¥. ×× ×€ÖŒ×š×Öž×××¢× ××× ×Ö·× ×€Ö¿×× Binaryen ס ×€×× × ×€×× ×××× ×× ×, ××֞ס ××× ×ַקסעס ×Š× ×Ö· ×ך××ס ךע×××××Ö·× ×Ö·×ךעס. ××× ×Š× ××ַק×××¢× ×ַך×× ××¢×?
××× ×× ×Ö·×××× ×ס×ך×Ö·×××××¢ ×××¢×
××× ××Öž× × ××©× ×עס××¢× ××¢×, ×Öž×עך ×××× ×¢×š×©×עך ××¢××Ö·× ×§ ××× ××¢×××¢× "×××֞ס ×××× ××× ××× ×¡××Ö·×××š× 32-×××¡× ××× ×קס?" ××¢×š× ×Öž× ×עך ××××עךש×עך ×××× ×€×× ×× ×Ö·×ךעס ×€ÖŒ××Ö·×¥ ×××¢× ×××× ×€×Ö·×š× ×××¢× ×××š× ×× ×§×¢×š×. ×עך ××××× ×§×©×× ××× ××× ×€×× ×××¢× ×××× ×€×Ö·×š× ×××¢×: 1 ×Öž×עך 2 ××××××××.
××× ×Ö· ׀֌ך×Öž×ך×Ö·×××¡× ×××¢× (×֞׀֌׊××¢ ×€Ö¿×ַך ׀֌ך×ַק×××©× ×¢×š×)
××× ×¡ ×××Öž×× ×Ö· ×××Öž× ××× ×× ×©×€ÖŒ××¥ ×€×× ×× ×Ö·×ךעס ×€ÖŒ××Ö·×¥. ××× ××× ××Öž× × ×× ×€Ö¿×ַךש×××× ×××֞ס עס ×ַך××¢× - ××Öž×š× ×©××× ×¢×¡ ×××× ×××× ×Ö· ×Öž× ×××××. ×Öž×עך "××ך ××¢× ×¢× ×€ÖŒ×š×ַק×××©× ×¢×š×: ×Ö·××¥ ×ַך××¢× ×€Ö¿×ַך ××× ××, ×Öž×עך ק××× ×××× ×¢×š ×××××¡× ×××֞ס ..."
// 2gbubble.c
// Usage: LD_PRELOAD=2gbubble.so <program>
#include <sys/mman.h>
#include <assert.h>
void __attribute__((constructor)) constr(void)
{
assert(MAP_FAILED != mmap(1u >> 31, (1u >> 31) - (1u >> 20), PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0));
}
... עס ××× ××ת ×Ö·× ×¢×¡ ××× × ××©× ×§×Ö·××€ÖŒ×Ö·××Ö·××Ö·× ××× Valgrind, ×Öž×עך, ׊×× ×××ק, Valgrind ××× ×××עך ×׀עק×××××× ×€ÖŒ×ש×× ×Ö·××¢××¢× ×××ס ×€×× ××Öž×š× :)
××Öž×עך ×¢×ע׊עך ×××¢× ××¢×× ×Ö· ×עסעך ×עךק×עך×× × ×€×× ××× ××¢× ×§×Öž× ×€×× ×××Ö·× ×ַך××¢× ...
×ק×ך: www.habr.com