Бинарный файл .wasm не предназначен для прямого чтения — но его можно преобразовать в WAT, читаемый текстовый формат WebAssembly, и проанализировать структурно, выходя за рамки простого потока инструкций. WASM Декомпилятор делает и то, и другое, прямо в браузере.
Проясним, что это такое, а что нет. Этот инструмент не восстанавливает исходный код на Rust, C или C++ — эта информация теряется, как только компилятор создаёт WASM. Что он восстанавливает точно:
- Полный дизассемблированный WAT, созданный
wabt(WebAssembly Binary Toolkit), с применёнными отладочными именами, если модуль содержит секцию "name". - Граф вызовов, построенный путём обхода реального байткода каждой функции в поисках инструкций
callиcall_indirect— а не угаданный из текста WAT.call_indirectпоказывает, на какую сигнатуру типа функции он нацелен, никогда не угаданную конкретную функцию, потому что реальная цель разрешается только во время выполнения — это структурный факт о коде, а не ограничение этого инструмента. - Структуру потока управления по функциям: максимальную глубину вложенности block/loop/if и количество каждого, давая приблизительное представление о структурной сложности функции без необходимости полного графа потока управления.
- Предположение о тулчейне на основе доказательств — "вероятно Rust", "вероятно Emscripten (C/C++)" или "вероятно AssemblyScript" — основанное на реальных, проверяемых доказательствах: искажённых префиксах символов Rust, характерных импортах рантайма Emscripten (
emscripten_*,__cxa_*,__wasm_call_ctors), или строках пути стандартной библиотеки AssemblyScript~lib/, найденных в сегментах данных модуля. Инструмент всегда показывает конкретные найденные доказательства и формулирует результат как "вероятно" — никогда как достоверность, и никогда как догадку без обоснования.
Функция, байткод которой использует инструкцию за пределами моделируемого набора опкодов инструмента (SIMD, атомарные операции, операции с массовой памятью), помечается как "частичный дизассемблированный код", а не молча показывается как полная — честность о границах анализа важнее аккуратного результата.
Полезно для аудита структуры стороннего модуля .wasm, понимания того, как его функции вызывают друг друга, или для первого знакомства с незнакомым бинарным файлом перед более глубоким анализом.
Tiny Online Tools







