Comments 4
Формат .wat стоило бы переименовать в .wtf, потому что эту нечитабельную смесь LISP'а с Brainfuck'ом очевидно придумывал сумасшедший. ИМХО, напрямую байт-код в HEX-редакторе изучать и то легче, чем такое «human-readable» представление.
Вот смотрите, допустим у нас есть простейшая функция вычисления факториала:
Мы её компилируем в .wasm, и потом «дизассемблируем» в .wat. Результат:
А вот что получится, если просто дизассемблировать байт-коды — последовательно, инструкцию за инструкцией, линейно. Как, собственно, и должен делать любой вменяемый дизассемблер, чей выхлоп предполагается для изучения живым человеком:
Вот смотрите, допустим у нас есть простейшая функция вычисления факториала:
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n-1);
}
Мы её компилируем в .wasm, и потом «дизассемблируем» в .wat. Результат:
(module
(type $t0 (func (param i64) (result i64)))
(func $f0 (type $t0) (param $p0 i64) (result i64)
(if $I0 (result i64)
(i64.eqz
(local.get $p0))
(then
(i64.const 1))
(else
(i64.mul
(local.get $p0)
(call $f0
(i64.sub
(local.get $p0)
(i64.const 1))))))))
А вот что получится, если просто дизассемблировать байт-коды — последовательно, инструкцию за инструкцией, линейно. Как, собственно, и должен делать любой вменяемый дизассемблер, чей выхлоп предполагается для изучения живым человеком:
(func (param i64) (result i64)
local.get 0
i64.eqz
if (result i64)
i64.const 1
else
local.get 0
local.get 0
i64.const 1
i64.sub
call 0
i64.mul
end)
Думаю в формате wasm.tree ваш пример читался бы вполне нормально:
Наверное, это уже устоявшийся акроним, но упомянуть стоит, что wasm — WebAssembly.
Я догадался, но пришлось сходить по ссылке для уверенности.
Так-то, wasm может быть Watcom Assembler (да, я динозавр).
Sign up to leave a comment.
Что внутри у .wasm-файла? Знакомство с wasm-decompile