Deasembler WebAssembly (WASM na WAT)
Zamień plik binarny .wasm na czytelny tekst WAT, zweryfikuj go i wypisz sekcje, importy, eksporty i funkcje – w przeglądarce, bez uruchamiania modułu.
Moduł jest tylko odczytywany i zamieniany na tekst: nigdy nie jest kompilowany, instancjonowany ani uruchamiany.
- Rozmiar
- –
- Funkcje
- –
- Importy
- –
- Eksporty
- –
- Typy
- –
- Pamięci
- –
- Tabele
- –
- Zmienne globalne
- –
Sekcje
| Sekcja | Przesunięcie | Rozmiar | Wpisy |
|---|
Importy
| Moduł | Nazwa | Rodzaj | Szczegóły |
|---|
Eksporty
| Nazwa | Rodzaj | Indeks |
|---|
Jak zamienić WASM na WAT
- Upuść plik
.wasmna pole upuszczania albo kliknij je, aby wybrać plik (do 20 MB). Możesz też kliknąć Wczytaj przykładowy moduł, aby zobaczyć małe demo. - Narzędzie sprawdza plik binarny, weryfikuje go i pokazuje wynik: ✓ Moduł jest poprawny. albo powód, dla którego nie jest.
- Odczytaj liczniki: Funkcje (importowane i zdefiniowane), Importy, Eksporty, Typy, Pamięci, Tabele i Zmienne globalne.
- Przeczytaj deasemblację w polu Format tekstowy WebAssembly (WAT), a następnie użyj Kopiuj albo Pobierz .wat.
- Dostosuj wynik opcjami: Użyj nazw z sekcji name, Wyrażenia zagnieżdżone (S-wyrażenia) i Eksporty w linii.
- Otwórz tabele Sekcje, Importy i Eksporty, aby zobaczyć układ pliku: każdą sekcję z przesunięciem w bajtach, rozmiarem i liczbą wpisów.
Moduł nigdy nie jest kompilowany, instancjonowany ani uruchamiany. Narzędzie tylko odczytuje jego bajty i zamienia je na tekst, więc można bezpiecznie obejrzeć plik, któremu nie ufasz.
Co pokazuje wynik WAT
WebAssembly ma dwa równoważne formaty: zwarty binarny .wasm, który wczytują przeglądarki i środowiska uruchomieniowe, oraz format tekstowy .wat, przeznaczony dla ludzi. Deasembler wypisuje w postaci tekstowej każdą część modułu: typy funkcji, importy, ciała funkcji, tabele, pamięci, zmienne globalne, eksporty, funkcję startową, segmenty elementów i segmenty danych.
Domyślnie instrukcje są wypisywane po jednej w linii, w kolejności stosu, tak jak są zapisane:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Z opcją Wyrażenia zagnieżdżone (S-wyrażenia) operandy są zagnieżdżane wewnątrz instrukcji, która ich używa, jak w (i32.add (local.get $a) (local.get $b)), co często łatwiej śledzić. Eksporty w linii zapisuje (export "add") wewnątrz funkcji zamiast na osobnej liście.
Nazwy, informacje debugowania i walidacja
Plik .wasm odwołuje się do wszystkiego przez indeksy. Gdy kompilator zachował sekcję niestandardową name (typowe w buildach debugowych), opcja Użyj nazw z sekcji name pokazuje oryginalne nazwy, np. $factorial. W przeciwnym razie wabt generuje nazwy w rodzaju $f2 lub $t0, aby tekst pozostał czytelny. Buildy produkcyjne często mają nazwy usunięte, więc zminifikowany moduł pokaże tylko nazwy wygenerowane.
Walidacja jest zgodna ze specyfikacją WebAssembly: typy na stosie operandów muszą się zgadzać, indeksy muszą istnieć itd. Niepoprawny moduł jest mimo to deasemblowany, jeśli da się odczytać jego strukturę, a obok pojawia się błąd walidacji – to pomaga przy debugowaniu kompilatora albo ręcznie pisanego pliku binarnego. Funkcje spoza MVP, takie jak SIMD, wątki, bulk memory, typy referencyjne, multi-value, wywołania ogonowe, obsługa wyjątków, memory64 i garbage collection, są włączone przy odczycie.
Narzędzie korzysta z wabt.js, javascriptowej wersji WebAssembly Binary Toolkit (wasm2wat). Jest ona wczytywana dopiero po otwarciu pliku.
Najczęściej zadawane pytania
Czy mogę odzyskać oryginalny kod w C, C++ lub Rust?
Nie. WAT to czytelna postać skompilowanego pliku binarnego, a nie dekompilator: kod źródłowy, komentarze i większość informacji o typach znikają podczas kompilacji. Nazwy funkcji przetrwają tylko wtedy, gdy zachowano sekcję name.
Czy mój plik jest przesyłany?
Nie. Plik jest odczytywany i deasemblowany w twojej przeglądarce; nic nie jest wysyłane na serwer.
Dlaczego narzędzie twierdzi, że plik nie jest plikiem binarnym WebAssembly?
Każdy moduł zaczyna się od czterech bajtów \0asm, po których następuje wersja 1. Plik o innej zawartości, skompresowany gzipem lub Brotli albo komponent WebAssembly (nowszy model komponentów) zostanie odrzucony.
Dlaczego tekst w polu jest ucięty?
Bardzo duże moduły mogą dać miliony linii. Pole tekstowe pokazuje pierwszą część, aby strona działała płynnie; Pobierz .wat zapisuje pełny tekst.
Czy mogę tu uruchomić lub przetestować moduł?
Nie. Moduł celowo nigdy nie jest instancjonowany, więc jego kod nie może działać na stronie. Aby go przetestować, wczytaj go we własnym projekcie albo w środowisku takim jak wasmtime czy Node.js.
Podobne narzędzia
- AST Explorer dla JavaScriptu Wklej kod JavaScript i przeglądaj jego abstrakcyjne drzewo składni (ESTree, parser Acorn) w przeglądarce. Klikaj węzły i eksportuj AST do JSON.
- Generator hashy Generuj hashe MD5, SHA-1, SHA-256 i SHA-512 z tekstu lub plików dowolnej wielkości i sprawdzaj sumy kontrolne. Wszystko działa w twojej przeglądarce.
- Koder i dekoder Base64 Darmowy koder i dekoder Base64 z pełną obsługą UTF-8 i opcją base64url bezpieczną dla URL. Działa w przeglądarce, nic nie jest wysyłane.