Зачем конвертировать WASM в WAT?
WAT - это человекочитаемая текстовая форма WebAssembly. Пользователи конвертируют .wasm в .wat, чтобы читать, проверять или отлаживать то, что на самом деле делает модуль - его функции, импорты и экспорты - так как сам бинарный файл нечитаем.
Способы конвертации WASM в WAT
wasm-tools print OPEN-SOURCE
Используя инструментарий Bytecode Alliance, выполните wasm-tools print module.wasm -o module.wat для записи текстового формата. Опустите -o, чтобы вывести результат в stdout.
wasm2wat (WABT) OPEN-SOURCE
Используя WebAssembly Binary Toolkit, выполните wasm2wat module.wasm -o module.wat. Добавьте --generate-names для получения читаемых меток функций и -f для сворачивания выражений.
Об этих форматах
Файл .wasm содержит скомпилированный модуль WebAssembly: переносимый бинарный байт-код, созданный из таких языков, как C, C++ или Rust, и работающий со скоростью, близкой к нативной.…
Открыть детали .WASM →Файл .WAT связан с IBM Voice Type Languages Map, это файл категории misc.
Открыть детали .WAT →Качество и на что обратить внимание
- Преобразование является точным, но это не оригинальный исходный код: вы видите низкоуровневые инструкции WASM, а не C/C++/Rust, на которых он был написан.
- Безымянные функции отображаются как числовые индексы, если не передать флаг генерации имен, что затрудняет анализ больших модулей.
- Редактирование WAT и повторная сборка с помощью wat2wasm возможны, но в них легко допустить ошибку для любых нетривиальных задач.
Часто задаваемые вопросы
Является ли преобразование wasm-to-wat без потерь?
wasm-tools или wabt - что использовать?
Можно ли конвертировать WAT обратно в .wasm?
wat2wasm module.wat -o module.wasm (WABT) повторно собирает его в бинарный файл.Как получить читаемые имена функций?
--generate-names в wasm2wat или сохраните секцию имен (name section) при исходной сборке.