WebAssembly disasemblers
Pārvērtiet .wasm bināro failu lasāmā WAT tekstā, validējiet to un skatiet sadaļas, importus, eksportus un funkcijas pārlūkprogrammā, nepalaižot moduli.
Modulis tiek tikai nolasīts un pārvērsts tekstā: tas nekad netiek kompilēts, instancēts vai palaists.
- Izmērs
- –
- Funkcijas
- –
- Importi
- –
- Eksporti
- –
- Tipi
- –
- Atmiņas
- –
- Tabulas
- –
- Globālie mainīgie
- –
Sadaļas
| Sadaļa | Nobīde | Izmērs | Ieraksti |
|---|
Importi
| Modulis | Nosaukums | Veids | Detaļas |
|---|
Eksporti
| Nosaukums | Veids | Indekss |
|---|
Kā pārvērst WASM par WAT
- Nometiet
.wasmfailu nomešanas zonā vai noklikšķiniet uz tās, lai izvēlētos failu (līdz 20 MB). Varat arī nospiest Ielādēt piemēra moduli, lai redzētu nelielu demonstrāciju. - Rīks pārbauda bināro failu, validē to un parāda rezultātu: ✓ Modulis ir derīgs. vai iemeslu, kāpēc nav.
- Izlasiet skaitītājus: Funkcijas (importētas un definētas), Importi, Eksporti, Tipi, Atmiņas, Tabulas un Globālie mainīgie.
- Izlasiet disasemblēto izvadi sadaļā WebAssembly teksta formāts (WAT), tad Kopēt to vai nospiediet Lejupielādēt .wat.
- Pielāgojiet izvadi ar iespējām: Izmantot nosaukumus no nosaukumu sadaļas, Salocītas izteiksmes (S-izteiksmes) un Iekļauti eksporti.
- Atveriet tabulas Sadaļas, Importi un Eksporti, lai redzētu faila uzbūvi: katra sadaļa ar baita nobīdi, izmēru un ierakstu skaitu.
Modulis nekad netiek kompilēts, instancēts vai palaists. Rīks tikai nolasa tā baitus un pārvērš tos tekstā, tāpēc ir droši pārbaudīt failu, kuram neuzticaties.
Ko rāda WAT izvade
WebAssembly ir divi līdzvērtīgi formāti: kompaktais binārais .wasm, ko ielādē pārlūkprogrammas un izpildlaiki, un teksta formāts .wat, kas paredzēts cilvēkiem. Disasemblers izdrukā katru moduļa daļu teksta formā: funkciju tipus, importus, funkciju pamatdaļas, tabulas, atmiņas, globālos mainīgos, eksportus, sākuma funkciju, elementu segmentus un datu segmentus.
Pēc noklusējuma instrukcijas tiek uzskaitītas pa vienai rindā steka secībā, tā, kā tās glabājas:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Ar Salocītas izteiksmes (S-izteiksmes) operandi tiek ligzdoti instrukcijā, kas tos izmanto, kā (i32.add (local.get $a) (local.get $b)), ko bieži ir vieglāk sekot. Iekļauti eksporti raksta (export "add") funkcijas iekšpusē, nevis atsevišķā sarakstā.
Nosaukumi, atkļūdošanas informācija un validācija
.wasm fails visam atsaucas pēc indeksa. Ja kompilators saglabājis name pielāgoto sadaļu (bieži atkļūdošanas būvējumos), Izmantot nosaukumus no nosaukumu sadaļas rāda sākotnējos nosaukumus, piemēram, $factorial. Pretējā gadījumā wabt ģenerē nosaukumus, piemēram, $f2 vai $t0, lai teksts paliktu lasāms. Ražošanas būvējumos nosaukumi bieži tiek noņemti, tāpēc minimizēts modulis rādīs tikai ģenerētus nosaukumus.
Validācija seko WebAssembly specifikācijai: tipiem jāsakrīt uz operandu steka, indeksiem jāpastāv utt. Nederīgs modulis tāpat tiek disasemblēts, ja tā struktūru var nolasīt, ar validācijas kļūdu blakus, kas palīdz, atkļūdojot kompilatoru vai ar roku rakstītu bināro failu. Pēc-MVP iespējas, piemēram, SIMD, pavedieni, masveida atmiņa, atsauču tipi, vairākvērtību atgriešana, astes izsaukumi, izņēmumu apstrāde, memory64 un atkritumu savākšana, lasīšanai ir ieslēgtas.
Šis rīks izmanto wabt.js, WebAssembly Binary Toolkit (wasm2wat) JavaScript būvējumu. Tas tiek ielādēts tikai tad, kad atverat failu.
Biežāk uzdotie jautājumi
Vai varu atgūt sākotnējo C, C++ vai Rust pirmkodu?
Nē. WAT ir kompilētā bināra faila lasāma forma, nevis dekompilators: pirmkods, komentāri un lielākā daļa tipu informācijas pēc kompilēšanas ir zudusi. Funkciju nosaukumi saglabājas tikai tad, ja nosaukumu sadaļa tika paturēta.
Vai mans fails tiek augšupielādēts?
Nē. Fails tiek nolasīts un disasemblēts jūsu pārlūkprogrammā; nekas netiek sūtīts uz serveri.
Kāpēc rīks saka, ka fails nav WebAssembly binārais fails?
Katrs modulis sākas ar četriem baitiem \0asm, kam seko 1. versija. Fails, kas piegādāts ar citu saturu, saspiests ar gzip vai Brotli, vai WebAssembly komponents (jaunākais komponentu modelis) tiks noraidīts.
Kāpēc teksta lodziņš ir nogriezts?
Ļoti lieli moduļi var radīt miljoniem rindu. Teksta lodziņš rāda pirmo daļu, lai lapa paliktu atsaucīga; Lejupielādēt .wat saglabā pilnu tekstu.
Vai šeit var palaist vai testēt moduli?
Nē. Modulis ar nodomu nekad netiek instancēts, tāpēc tā kods lapā nevar darboties. Lai to testētu, ielādējiet to savā projektā vai izpildlaikā, piemēram, wasmtime vai Node.js.
Saistītie rīki
- JavaScript AST pārlūks Ielīmējiet JavaScript kodu un izpētiet tā abstrakto sintakses koku (ESTree, Acorn) pārlūkprogrammā. Atlasiet mezglus un eksportējiet AST kā JSON.
- Jaucējkodu ģenerators Izveidojiet teksta vai jebkura izmēra failu MD5, SHA-1, SHA-256 un SHA-512 jaucējkodus un pārbaudiet kontrolsummas. Viss darbojas jūsu pārlūkprogrammā.
- Base64 kodētājs un atkodētājs Bezmaksas Base64 kodētājs un atkodētājs ar pilnu UTF-8 atbalstu un URL drošu base64url variantu. Darbojas pārlūkprogrammā, nekas netiek augšupielādēts.