.Wasm рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ? рдкреНрд░рд╕реНрддреБрдд рдерд╛ wasm-decompile

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ .wasm рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдХрдИ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рд╣реИрдВред рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣реА рд╣реИред рдХрднреА-рдХрднреА рдЖрдкрдХреЛ .wasm рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдПрдХ рд╡рд╛рд╕рдо рдЯреВрд▓ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдВ, рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реЛрдВ, рдЬреЛ рдХреЛрдб рдХреЛ рд╡рд╛рд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реЛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдХреЛрдб рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреНрдпрд╛рдЬ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗред



рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ .wasm рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрд╡реАрдПрдо, рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд▓реЛрдб / рд╕реНрдЯреЛрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдРрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╡рд░реНрдЧ рдФрд░ рдлрд╝реАрд▓реНрдб рдирд╛рдо рд╣реЛрдВред рдХрдВрдкрд╛рдЗрд▓рд░, рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреА рддрд░рд╣, рдЗрдирдкреБрдЯ рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЬреЛ рдорд┐рд▓рддрд╛ рд╣реИ рд╡рд╣ рдЙрд╕рдХреЗ рдХрд░реАрдм рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред 

рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ .wasm рдлрд╝рд╛рдЗрд▓ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрд╕рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рд╡рд┐рдШрдЯрд┐рдд рдпрд╛ ... рд╡рд┐рдШрдЯрд┐рдд?


рдЖрдк .m2wat рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .wasm рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ .mat рдХреЛрдб рдХреЗ рдПрдХ рдорд╛рдирдХ рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрд╣ WABT рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ )ред рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рд╕рдЯреАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдкрдврд╝рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИ:

typedef struct { float x, y, z; } vec3;

float dot(const vec3 *a, const vec3 *b) {
    return a->x * b->x +
           a->y * b->y +
           a->z * b->z;
}

рдХреЛрдб рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ dot.cред

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

clang dot.c -c -target wasm32 -O2

рдЕрдЧрд▓рд╛, .wat рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ, рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

wasm2wat -f dot.o

рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛:

(func $dot (type 0) (param i32 i32) (result f32)
  (f32.add
    (f32.add
      (f32.mul
        (f32.load
          (local.get 0))
        (f32.load
          (local.get 1)))
      (f32.mul
        (f32.load offset=4
          (local.get 0))
        (f32.load offset=4
          (local.get 1))))
    (f32.mul
      (f32.load offset=8
        (local.get 0))
      (f32.load offset=8
        (local.get 1))))))

рдХреЛрдб рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рдпрд╣, рдкреВрд░реЗ рдкрд░, рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рджрд┐рдЦрддрд╛ рд╣реИ, рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреЗ рдРрд╕реЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реЛрдЧрд╛ред

рдЖрдЗрдП, wasm2wat рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

wasm-decompile dot.o

рдпрд╣рд╛рдБ рд╡рд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛:

function dot(a:{ a:float, b:float, c:float },
             b:{ a:float, b:float, c:float }):float {
  return a.a * b.a + a.b * b.b + a.c * b.c
}

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рдпрд╛рдж рддрд╛рдЬрд╛ рдХрд░рддреЗ рд╣реБрдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдХрдореНрдкреЙрдЗрд▓рд░ рдкрд╛рд░реНрд╕ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрди рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рддрдм рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд" рд╕рдВрд░рдЪрдирд╛ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреАрдХреЛрдореНрдкрд╛рдЗрд▓рд░ рдПрдХ рдирд╛рдорд┐рдд рд╕рдВрд░рдЪрдирд╛ рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЖрдо рдХреБрдЫ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ 3 рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдШрдЯрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рдШрдЯрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред

рдбрд┐рдХрдореНрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдХрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ?


Wasm-decompile рдЯреВрд▓ рдХреЛрдб рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдХреЛрдб рдХреЛ "рдФрд╕рдд" рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдпрд╣ рдЙрдкрдХрд░рдг рд╡реЙрд╕рдо рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред

Wasm-decompiler рдХрд╛ рдкрд╣рд▓рд╛ рд▓рдХреНрд╖реНрдп рдкрдардиреАрдп рдХреЛрдб рдмрдирд╛рдирд╛ рдерд╛ред рд╡рд╣ рд╣реИ - рдРрд╕рд╛ рдХреЛрдб рдЬреЛ рдЕрдкрдиреЗ рдкрд╛рдардХ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ рд╡рд┐рдШрдЯрд┐рдд .wasm рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рджреВрд╕рд░рд╛ рдЙрджреНрджреЗрд╢реНрдп .wasm рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпреЗ рд▓рдХреНрд╖реНрдп рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреЗ рд╕рдордЭреМрддреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рджреВрд░ рд╣реИрдВред

рдореВрд▓ рд░реВрдк рд╕реЗ рдбрд┐рдХрдордкрд╛рдЗрд▓рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рдерд╛, рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рдереАред рдЗрд╕ рдХреЛрдб рдХреЛ Wasm рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлрд┐рд▓рд╣рд╛рд▓ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИ


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, wasm-decompile рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдорд╛рдВрдб рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реИред рдпрджрд┐ рдпреЗ рдЖрджреЗрд╢ рдПрдХ рдирд┐рд░рдВрддрд░ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рдХрдореНрдкреЙрдЗрд▓рд░ рдПрдХ "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд" рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рд╕рднреА "рдлрд╝реАрд▓реНрдбреНрд╕" рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ, рддреЛ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрдХреНрд░рдо рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, wasm-decompile рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, float_ptr(рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рд╣реИрдВ), рдпрд╛, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреИрд╕реЗ o[2]:intред рдРрд╕рд╛ рдХреЛрдб рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ oрдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ int, рдФрд░ рд╣рдо рддреАрд╕рд░реЗ рдРрд╕реЗ рддрддреНрд╡ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред

рдпрд╣ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реЛрдЪрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдарддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд░ рдХреЗ рдмрдЬрд╛рдп рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдореЗрдВ, рдПрдХ рд╣реА рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбреАрдХреЛрдореНрдкрд╛рдЗрд▓рд░ рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрджреНрдзрд┐рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕реЗ рдкреИрдЯрд░реНрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ (base + (index << 2))[0]:intред рдРрд╕реЗ рдкреИрдЯрд░реНрди рдХрд╛ рд╕реНрд░реЛрдд рд╕реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдХреНрд░рдордг рд╕рдВрдЪрд╛рд▓рди рд╣реИ, рдЬреИрд╕реЗ base[index]рдХрд┐ рдпрд╣ base4-рдмрд╛рдЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЖрдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЙрд╕рдо, рдбреЗрдЯрд╛ рдХрдорд╛рдВрдб рдХреЛ рд▓реЛрдб рдФрд░ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдСрдлрд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред Wasm-decompile рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ, рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ base[index]:intред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреАрдХреЙрдореНрдкреЗрд▓рд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдкреВрд░реНрдг рдкрддреЗ рдПрдХ рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг


рдЕрдЧрд░ рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рд╣реИ рдЕрдЧрд░-рддрддреНрдХрд╛рд▓реАрди Wasm рдирд┐рд░реНрдорд╛рдг, рдЬреЛ if (cond) { A } else { B }рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рде рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ Wasm рдореЗрдВ рдРрд╕рд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ cond ? A : B, рдЬреЛ рдХреБрдЫ рдореЗрдВ рд╣реИ рднрд╛рд╖рд╛рдУрдВред

рдЕрдиреНрдп Wasm рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛рдУрдВ рдмреНрд▓реЙрдХ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ blockрдФрд░ loop, рд╕рд╛рде рд╣реА рд╕рдВрдХреНрд░рдордг br, br_ifрдФрд░ br_tableред рдбрд┐рдХрдореНрдкреЙрдЗрд▓рд░ рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХрд░реАрдм рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдирд┐рд░реНрдорд╛рдг / рдирд┐рд░реНрдорд╛рдг / рд╕реНрд╡рд┐рдЪ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЦреБрдж рдХреЛ рдмреЗрд╣рддрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбрд┐рдЬрд╛рдЗрдиloop рдЗрд╕ рддрд░рд╣ рд╕реЗ wasm-decompile рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдХреЛрдб рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

loop A {
  //    .
  if (cond) continue A;
}

рдпрд╣рд╛рдВ AрдПрдХ рд▓реЗрдмрд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ loopред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдЬреНрдЮрд╛рдПрдВ рд╣реИрдВ ifрдФрд░ continueрдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд▓рдЧ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╛рд╕-рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ br_ifред

рдмреНрд▓реЙрдХ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реИрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдирд╣реАрдВ:

block {
  if (cond) break;
  //    .
}

рдпрджрд┐ рддрддреНрдХрд╛рд▓реАрди рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбрд┐рдХрдореНрдкрд╛рдЗрд▓рд░ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рд╢рд╛рдпрдж, рдРрд╕реЗ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп, рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рдПрдХ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдЕрдЧрд░-рддрдм рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛ред

рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдмрд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕рдо рдЙрдкрдХрд░рдг рд╣реИ br_tableред рдпрд╣ рдЯреВрд▓ рдПрдХ рддрд░рд╣ рдХрд╛ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдЗрдирд▓рд╛рдЗрди рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдХреЛрдб рдХреЗ рдкрдврд╝рдиреЗ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдбрд┐рдХрдореНрдкреЙрдЗрд▓рд░ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЙрдирдХреА рдзрд╛рд░рдгрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ:

br_table[A, B, C, ..D](a);
label A:
return 0;
label B:
return 1;
label C:
return 2;
label D:

рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрдм switchрд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдпрд╛рдж рддрд╛рдЬрд╛ рдХрд░рддреА aрд╣реИ Dред

рдЕрдиреНрдп рд░реЛрдЪрдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдпрд╣рд╛рдБ wasm-decompile рдХреА рдХреБрдЫ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:

  • , . C++-.
  • , , , . . , .
  • .
  • Wasm-, . , wasm-decompile , , , .
  • , ( , C- ).

 


Decompiling Wasm рдХреЛрдб рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JVM рдмрд╛рдЗрдЯ рдХреЛрдб рдХреЛ рдбрд┐рдХрдВрдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред

рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХрд╛рдлреА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдореЗрдВ рдореВрд▓ рдирд╛рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╛рдпрдЯреЗрдХреЛрдб рдЕрджреНрд╡рд┐рддреАрдп рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

JVM bytecode рдХреЗ рд╡рд┐рдкрд░реАрдд, .wasm рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб LLVM рджреНрд╡рд╛рд░рд╛ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред рдирддреАрдЬрддрди, рдРрд╕рд╛ рдХреЛрдб рдЕрдХреНрд╕рд░ рдЕрдкрдиреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬреЛ рд▓рд┐рдЦреЗрдЧрд╛ рдЙрд╕рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде Wasm рдХреЛрдб рдХреЛ рдбрд┐рдХрдореНрдкреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдн рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!

рд╕рд╛рд░рд╛рдВрд╢


рдпрджрд┐ рдЖрдк рд╡рд╛рд╕ рдХреЛрдб рдбрд┐рдХрдореНрдкреЛрдЬрд┐рд╢рди рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ .wasm рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЗрдВ рдФрд░ рдбрд┐рдХрдореНрдкрд╛рдЗрд▓ рдХрд░реЗрдВ! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдЖрдк wasm-decompile рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд╛рдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ decompile(рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдбрд┐рдХреЙрдореНрдкреЗрд▓рд░ рдкрд░ рдХрд╛рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ)ред рдпрд╣рд╛рдБ рдЖрдк .wat рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рд╡рд┐рдШрдЯрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддреЗ рд╣реБрдП рдкрд░реАрдХреНрд╖рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЖрдк рдХрд┐рди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╢реЛрдз рдХрд░рддреЗ рд╣реИрдВред

, , iPhone. , .


All Articles