V8 әзірлеушілері WebAssembly үшін декомпиляторды ұсынды

V8 JavaScript қозғалтқышын әзірлеушілер ұсынылды утилита wasm-декомпиляция, бұл аралық екілік көріністі декомпиляциялауға мүмкіндік береді webassembly JavaScript және C тілдерін еске түсіретін оқылатын жалған тілге. Ұсынылған псевдо-тілді түсіну әлдеқайда оңай және WebAssembly-тің «.wat» пішіміндегі мәтіндік көрсетіліміне қарағанда қолмен талдауға қолайлы, ол жоғары деңгейлі тілдерге қарағанда ассемблер тіліне жақын. Бұл жағдайда декомпиляция Wasm көрінісін мүмкіндігінше толық көрсетеді.

Декомпилятор қосылды құралдар жинағына енгізілген WABT, ол WebAssembly екілік және мәтіндік көрсетілімдері арасындағы аударманы, сондай-ақ wasm файлдарын талдауды, өңдеуді, өзгертуді және тексеруді қамтамасыз етеді. WABT сонымен қатар қызметтік бағдарламаны әзірлеуде wasm2c, бұл wasm файлдарын C компиляторы құрастыра алатын баламалы C кодына декомпиляциялауға мүмкіндік береді, бірақ оқылу тұрғысынан «ват» мәтіндік көрінісінен айтарлықтай ерекшеленбейді.

Мысалы, 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: қалтқы, б: қалқыма, с: қалқыма}): қалқыма {
қайтару aa * ba + ab * bb + ac * bc
}

ал «.wat» мәтіндік пішіміне түрлендіру келесідей болады

(функ $нүкте (0 түрі) (i32 i32 параметрі) (f32 нәтижесі)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(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

пікір қалдыру