V8 āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻā§āĻāĻŋāĻ¨ā§āĻ° āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§āĻ°āĻž āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻāĻĒāĻ¯ā§āĻ wasm-decompile, āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĄāĻŋāĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ WebAssembly āĻāĻāĻāĻŋ āĻĒāĻ āĻ¨āĻ¯ā§āĻā§āĻ¯ āĻāĻĻā§āĻŽ-āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻ¯āĻž āĻāĻžāĻāĻžāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻŦāĻ āĻ¸āĻŋ-āĻāĻ° āĻ¸ā§āĻŽāĻ°āĻŖ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻŋāĻ¤ āĻāĻĻā§āĻŽ-āĻāĻžāĻˇāĻž āĻŦā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨ā§āĻ āĻ¸āĻšāĻ āĻāĻŦāĻ ".wat" āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§ WebAssembly-āĻāĻ° āĻĒāĻžāĻ ā§āĻ¯ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻā§āĻ¯āĻŧā§ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°āĻ āĻāĻĒāĻ¯ā§āĻā§āĻ¤, āĻ¯āĻž āĻāĻā§āĻ-āĻ¸ā§āĻ¤āĻ°ā§āĻ° āĻāĻžāĻˇāĻžāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻžāĻˇāĻžāĻ° āĻāĻžāĻāĻžāĻāĻžāĻāĻŋāĨ¤ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, decompilation āĻ¯āĻ¤āĻāĻž āĻ¸āĻŽā§āĻāĻŦ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ Wasm āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻŋāĻ¤ āĻāĻ°ā§āĨ¤
āĻĄāĻŋāĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻā§āĻ˛āĻāĻŋāĻā§ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ WABT, āĻ¯āĻž WebAssembly-āĻāĻ° āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻāĻŦāĻ āĻā§āĻā§āĻ¸āĻ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ wsm āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ, āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖ, āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻŦāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖāĨ¤ WABT āĻāĻāĻāĻŋ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻā§ wasm2c, āĻ¯āĻž wasm āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻŽāĻ¤ā§āĻ˛ā§āĻ¯ C āĻā§āĻĄā§ āĻĄāĻŋāĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ āĻ¯āĻž āĻāĻāĻāĻŋ C āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ "wat" āĻāĻ° āĻĒāĻžāĻ ā§āĻ¯ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĨā§āĻā§ āĻĒāĻžāĻ āĻ¯ā§āĻā§āĻ¯āĻ¤āĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻāĻ˛āĻžāĻĻāĻž āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, wasm āĻ āĻ¸āĻāĻāĻ˛āĻŋāĻ¤ āĻŽā§āĻ˛ C āĻĢāĻžāĻāĻļāĻ¨
typedef struct { float x, y, z; } vec3;
āĻĢā§āĻ˛ā§āĻ āĻĄāĻ (const vec3 *a, const vec3 *b) {
āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ¨ a->x * b->x +
a->y * b->y +
a->z * b->z;
}
āĻāĻāĻāĻŋ āĻāĻĻā§āĻŽ-āĻāĻžāĻˇāĻžāĻ¯āĻŧ wasm-decompile āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĄāĻŋāĻāĻŽā§āĻĒāĻžāĻāĻ˛ āĻāĻ°āĻž āĻšāĻŦā§
āĻĢāĻžāĻāĻļāĻ¨ āĻĄāĻ (a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
aa * ba + ab * bb + ac * bc āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ¨
}
āĻ¯āĻāĻ¨ āĻā§āĻā§āĻ¸āĻ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° ".wat" āĻāĻ° āĻŽāĻ¤ āĻšāĻŦā§
(func $dot (āĻāĻžāĻāĻĒ 0) (param i32 i32) (āĻĢāĻ˛āĻžāĻĢāĻ˛ f32)
(f32.add
(f32.add
(f32.mul
(f32.āĻ˛ā§āĻĄ
(local.get 0))
(f32.āĻ˛ā§āĻĄ
(local. get 1)))
(f32.mul
(f32. āĻ˛ā§āĻĄ āĻ
āĻĢāĻ¸ā§āĻ=4
(local.get 0))
(f32. āĻ˛ā§āĻĄ āĻ
āĻĢāĻ¸ā§āĻ=4
(local. get 1))))
(f32.mul
(f32. āĻ˛ā§āĻĄ āĻ
āĻĢāĻ¸ā§āĻ=8
(local.get 0))
(f32. āĻ˛ā§āĻĄ āĻ
āĻĢāĻ¸ā§āĻ=8
(local. get 1))))))
āĻāĻ¤ā§āĻ¸: opennet.ru