WASM Section Inspector and Demangler
List the sections inside a .wasm binary and turn Itanium _ZN symbol names into namespace paths, in the browser.
🔒 Processed entirely in your browser — nothing you enter here is ever uploaded.
The result appears on this page after you run the tool. Nothing you enter is uploaded.
Result
About this tool
Drop a .wasm file and the page checks the first eight bytes. The magic number has to be 00 61 73 6d, the characters \0asm, and the next four bytes are a little-endian version. From byte 8 it reads a section id and a LEB128 section size, records that span, and jumps forward until the buffer ends. Sections 0 through 11 are labeled custom, type, import, function, table, memory, global, export, start, element, code, and data. Every section except custom and start also shows the LEB128 item count at the start of its payload. The text report and the bar chart both use those sizes, and each bar is drawn against a 4096-byte scale, so a section larger than 4 KB fills the row.
The symbol box is a separate step from the file. The button runs only the demangler. A line that begins with _ZN is split into decimal length prefixes until the letter E, and the pieces are joined with double colons. _ZN3foo3barE becomes foo::bar. A final piece that starts with h and is exactly 17 characters long is dropped as a Rust hash. Lines that do not start with _ZN are copied through unchanged.
Searches for a wasm disassembler or wasm decompiler usually want WAT, with an opcode for every instruction in the code section. This page stops at the section header. The code section is counted and sized, and its bytes stay binary. Use the list to see how a module is laid out, and the symbol box to read Itanium names. A tool such as wasm2wat is the one that prints the instructions.
Example. The symbol _ZN3foo3barE demangles to foo::bar. A .wasm file whose header is 00 61 73 6d is listed by section id, byte size, and item count.
Limit. The binary view lists section headers. It does not print WAT or decode opcodes. A symbol that does not start with _ZN is copied unchanged, and a Rust hash suffix is removed only when the last part is 17 characters beginning with h.
Is this a WebAssembly disassembler or decompiler?
It checks the \0asm magic and the following little-endian version, then walks each section’s LEB128 size. Ids 0 through 11 are named, from the custom section through the data section, and every section except custom and start also shows an item count. Function bodies stay binary. wasm2wat and a decompiler still do that other job.
How does the C++ and Rust demangler work?
Paste one symbol per line. A line that starts with _ZN is split into length-prefixed parts until E, then joined with ::. If the last part starts with h and is 17 characters long, it is treated as a Rust hash and dropped. _ZN3foo3barE becomes foo::bar. Other lines are returned as typed.
Does the .wasm file get uploaded?
The drop target reads the file with FileReader into an ArrayBuffer in the page. The name must end in .wasm. A buffer shorter than 8 bytes, or one whose first four bytes are not 00 61 73 6d, is reported as invalid. Nothing in this tool sends the bytes to a server.