WebAssembly Disassembler
I-convert ang .wasm binary sa nababasang WAT text, i-validate ito at ilista ang mga section, import, export at function, nang hindi pinapatakbo ang module.
Binabasa lang at kino-convert sa text ang module: hindi ito kailanman kino-compile, ini-instantiate o pinapatakbo.
- Laki
- –
- Mga function
- –
- Mga import
- –
- Mga export
- –
- Mga uri
- –
- Mga memory
- –
- Mga table
- –
- Mga global
- –
Mga section
| Section | Offset | Laki | Mga entry |
|---|
Mga import
| Module | Pangalan | Uri | Mga detalye |
|---|
Mga export
| Pangalan | Uri | Index |
|---|
Paano i-convert ang WASM sa WAT
- I-drop ang isang
.wasmfile sa drop zone, o i-click ito para pumili (hanggang 20 MB). Puwede mo ring pindutin ang Mag-load ng halimbawang module para makita ang maliit na demo. - Sinusuri ng tool ang binary, vina-validate ito at ipinapakita ang resulta: ✓ Valid ang module., o ang dahilan kung bakit hindi.
- Basahin ang mga counter: Mga function (na-import at na-define), Mga import, Mga export, Mga uri, Mga memory, Mga table at Mga global.
- Basahin ang disassembly sa WebAssembly text format (WAT), pagkatapos ay Kopyahin ito o pindutin ang I-download ang .wat.
- Isaayos ang output gamit ang mga opsyon: Gamitin ang mga pangalan mula sa name section, Mga folded expression (S-expression) at Mga inline export.
- Buksan ang mga talahanayan ng Mga section, Mga import at Mga export para sa layout ng file: bawat section kasama ang byte offset, laki at bilang ng mga entry nito.
Hindi kailanman kino-compile, ini-instantiate o pinapatakbo ang module. Binabasa lang ng tool ang mga byte nito at ginagawang text, kaya ligtas suriin ang file na hindi mo pinagkakatiwalaan.
Ano ang ipinapakita ng WAT output
May dalawang magkapantay na format ang WebAssembly: ang compact na binary na .wasm na nilo-load ng mga browser at runtime, at ang text format na .wat, na para sa tao. Inililimbag ng disassembler ang bawat bahagi ng module sa anyong text: mga uri ng function, import, katawan ng function, table, memory, global, export, start function, element segment at data segment.
Bilang default, nakalista ang mga instruction nang isa bawat linya sa pagkakasunod ng stack, gaya ng pagkaka-imbak:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Sa Mga folded expression (S-expression), naka-nest ang mga operand sa loob ng instruction na gumagamit sa kanila, gaya ng (i32.add (local.get $a) (local.get $b)), na kadalasang mas madaling sundan. Isinusulat ng Mga inline export ang (export "add") sa loob ng function sa halip na sa hiwalay na listahan.
Mga pangalan, debug information at validation
Sa index tumutukoy ang .wasm file sa lahat ng bagay. Kapag pinanatili ng compiler ang custom section na name (karaniwan sa mga debug build), ipinapakita ng Gamitin ang mga pangalan mula sa name section ang orihinal na mga pangalan gaya ng $factorial. Kung hindi, gumagawa ang wabt ng mga pangalan gaya ng $f2 o $t0 para manatiling nababasa ang text. Madalas tinatanggalan ng mga pangalan ang mga production build, kaya ang minified na module ay magpapakita lang ng mga nabuong pangalan.
Sumusunod ang validation sa WebAssembly specification: dapat tumugma ang mga uri sa operand stack, dapat umiiral ang mga index, at iba pa. Dinidisassemble pa rin ang invalid na module kapag mababasa ang istruktura nito, kasama ang validation error sa tabi nito, na nakakatulong kapag nagde-debug ka ng compiler o sulat-kamay na binary. Naka-enable para sa pagbasa ang mga post-MVP na tampok gaya ng SIMD, thread, bulk memory, reference type, multi-value, tail call, exception handling, memory64 at garbage collection.
Gumagamit ang tool na ito ng wabt.js, ang JavaScript build ng WebAssembly Binary Toolkit (wasm2wat). Nilo-load lang ito kapag nagbukas ka ng file.
Mga madalas itanong
Maibabalik ko ba ang orihinal na source sa C, C++ o Rust?
Hindi. Ang WAT ay nababasang anyo ng na-compile na binary, hindi decompiler: nawawala na ang source code, mga komento at karamihan ng impormasyon ng uri pagkatapos ng compilation. Nananatili lang ang mga pangalan ng function kapag pinanatili ang name section.
Ina-upload ba ang file ko?
Hindi. Binabasa at dinidisassemble ang file sa iyong browser; walang ipinapadala sa server.
Bakit sinasabi ng tool na hindi WebAssembly binary ang file?
Ang bawat module ay nagsisimula sa apat na byte na \0asm na sinusundan ng version 1. Tatanggihan ang file na iba ang inihahaing nilalaman, na-compress gamit ang gzip o Brotli, o WebAssembly component (ang mas bagong component model).
Bakit putol ang text box?
Ang napakalalaking module ay maaaring makagawa ng milyun-milyong linya. Ipinapakita ng text box ang unang bahagi para manatiling tumutugon ang page; ise-save ng I-download ang .wat ang kumpletong text.
Puwede ko bang patakbuhin o subukan ang module dito?
Hindi. Sadyang hindi kailanman ini-instantiate ang module, kaya hindi tatakbo sa page ang code nito. Para subukan ito, i-load ito sa sarili mong proyekto o sa runtime gaya ng wasmtime o Node.js.
Mga kaugnay na tool
- JavaScript AST Explorer I-paste ang JavaScript at tuklasin ang abstract syntax tree nito (ESTree, Acorn) sa iyong browser. I-click ang mga node at i-export ang AST bilang JSON.
- Hash Generator Gumawa ng MD5, SHA-1, SHA-256 at SHA-512 hash ng text o mga file na anumang laki, at i-verify ang mga checksum. Lahat ay tumatakbo sa iyong browser.
- Base64 Encoder at Decoder Libreng Base64 encoder at decoder na may buong UTF-8 support at URL-safe na base64url. Gumagana sa iyong browser, walang ina-upload na kahit ano.