WebAssembly дисасемблер (WASM во WAT)
Претворете .wasm бинарна датотека во читлив WAT текст, проверете ја и прегледајте секции, увози, извози и функции, во прелистувачот без извршување на модулот.
Модулот само се чита и се претвора во текст: никогаш не се компајлира, инстанцира или извршува.
- Големина
- –
- Функции
- –
- Увози
- –
- Извози
- –
- Типови
- –
- Мемории
- –
- Табели
- –
- Глобални променливи
- –
Секции
| Секција | Поместување | Големина | Записи |
|---|
Увози
| Модул | Име | Вид | Детали |
|---|
Извози
| Име | Вид | Индекс |
|---|
Како да претворите WASM во WAT
- Спуштете датотека
.wasmна површината за спуштање или кликнете на неа за избор (до 20 MB). Можете да притиснете и Вчитај примерен модул за да видите мала демонстрација. - Алатката ја проверува бинарната датотека, ја валидира и го покажува резултатот: ✓ Модулот е важечки. или причината зошто не е.
- Прочитајте ги бројачите: Функции (увезени и дефинирани), Увози, Извози, Типови, Мемории, Табели и Глобални променливи.
- Прочитајте го дисасемблирањето во Текстуален формат на WebAssembly (WAT), па Копирај го или притиснете Преземи .wat.
- Прилагодете го излезот со опциите: Користи имиња од name секцијата, Свиткани изрази (S-изрази) и Вградени извози.
- Отворете ги табелите Секции, Увози и Извози за распоредот на датотеката: секоја секција со своето поместување во бајти, големина и број на записи.
Модулот никогаш не се компајлира, инстанцира или извршува. Алатката само ги чита неговите бајти и ги претвора во текст, па е безбедно да прегледате датотека на која не ѝ верувате.
Што покажува WAT излезот
WebAssembly има два еквивалентни формата: компактниот бинарен .wasm што го вчитуваат прелистувачите и извршните околини, и текстуалниот формат .wat, наменет за луѓе. Дисасемблерот го печати секој дел од модулот во текстуална форма: типови на функции, увози, тела на функции, табели, мемории, глобални променливи, извози, почетната функција, сегменти на елементи и сегменти на податоци.
По основно, инструкциите се наведени по една во ред по редослед на стекот, онака како што се чуваат:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Со Свиткани изрази (S-изрази), операндите се вгнездени во инструкцијата што ги користи, како во (i32.add (local.get $a) (local.get $b)), што често е полесно за следење. Вградени извози го пишува (export "add") во самата функција наместо во посебна листа.
Имиња, информации за дебагирање и валидација
Датотеката .wasm упатува на сè по индекс. Кога компајлерот ја задржал custom секцијата name (вообичаено во debug градби), Користи имиња од name секцијата ги покажува оригиналните имиња како $factorial. Инаку wabt генерира имиња како $f2 или $t0 за текстот да остане читлив. Продукциските градби често се лишени од имиња, па минимизиран модул ќе покажува само генерирани имиња.
Валидацијата ја следи спецификацијата на WebAssembly: типовите мора да се совпаѓаат на стекот на операнди, индексите мора да постојат и така натаму. Неважечки модул сепак се дисасемблира кога неговата структура може да се прочита, со грешката од валидацијата покрај него, што помага при дебагирање на компајлер или рачно напишана бинарна датотека. Функциите по MVP, како SIMD, нишки, bulk memory, референтни типови, multi-value, tail calls, обработка на исклучоци, memory64 и собирање ѓубре, се овозможени за читање.
Оваа алатка користи wabt.js, JavaScript верзијата на WebAssembly Binary Toolkit (wasm2wat). Се вчитува само кога ќе отворите датотека.
Често поставувани прашања
Можам ли да го добијам оригиналниот C, C++ или Rust изворен код назад?
Не. WAT е читлива форма на компајлираната бинарна датотека, а не декомпајлер: изворниот код, коментарите и поголемиот дел од информациите за типови се изгубени по компајлирањето. Имињата на функциите преживуваат само ако name секцијата е зачувана.
Дали мојата датотека се качува?
Не. Датотеката се чита и дисасемблира во вашиот прелистувач; ништо не се испраќа на сервер.
Зошто алатката вели дека датотеката не е WebAssembly бинарна?
Секој модул почнува со четирите бајти \0asm проследени со верзија 1. Датотека со поинаква содржина, компресирана со gzip или Brotli, или WebAssembly компонента (поновиот модел на компоненти) ќе биде одбиена.
Зошто текстуалното поле е скратено?
Многу големи модули може да произведат милиони редови. Текстуалното поле го покажува првиот дел за страницата да остане одзивна; Преземи .wat го зачувува целиот текст.
Можам ли да го извршам или тестирам модулот овде?
Не. Модулот намерно никогаш не се инстанцира, па неговиот код не може да се извршува на страницата. За да го тестирате, вчитајте го во вашиот проект или во извршна околина како wasmtime или Node.js.
Поврзани алатки
- JavaScript AST истражувач Залепете JavaScript и истражете го неговото апстрактно синтаксно дрво (ESTree, Acorn) во прелистувачот. Кликнете на јазли и извезете го AST како JSON.
- Хеш генератор Генерирајте MD5, SHA-1, SHA-256 и SHA-512 хешови на текст или датотеки со која било големина и проверете контролни суми. Сè работи во прелистувачот.
- Base64 кодер и декодер Бесплатен Base64 кодер и декодер со целосна UTF-8 поддршка и опција base64url безбедна за URL. Работи во прелистувачот, ништо не се качува.