Αποσυναρμολογητής WebAssembly
Μετατρέψτε ένα δυαδικό .wasm σε ευανάγνωστο κείμενο WAT, επικυρώστε το και δείτε ενότητες, εισαγωγές και εξαγωγές στον browser, χωρίς εκτέλεση της μονάδας.
Η μονάδα απλώς διαβάζεται και μετατρέπεται σε κείμενο: δεν μεταγλωττίζεται, δεν δημιουργείται στιγμιότυπό της και δεν εκτελείται ποτέ.
- Μέγεθος
- –
- Συναρτήσεις
- –
- Εισαγωγές
- –
- Εξαγωγές
- –
- Τύποι
- –
- Μνήμες
- –
- Πίνακες
- –
- Καθολικές
- –
Ενότητες
| Ενότητα | Μετατόπιση | Μέγεθος | Εγγραφές |
|---|
Εισαγωγές
| Μονάδα | Όνομα | Είδος | Λεπτομέρειες |
|---|
Εξαγωγές
| Όνομα | Είδος | Δείκτης |
|---|
Πώς να μετατρέψετε WASM σε WAT
- Σύρετε ένα αρχείο
.wasmστην περιοχή απόθεσης ή κάντε κλικ σε αυτήν για να επιλέξετε ένα (έως 20 MB). Μπορείτε επίσης να πατήσετε Φόρτωση παραδείγματος μονάδας για ένα μικρό demo. - Το εργαλείο ελέγχει το δυαδικό αρχείο, το επικυρώνει και δείχνει το αποτέλεσμα: ✓ Η μονάδα είναι έγκυρη. ή τον λόγο για τον οποίο δεν είναι.
- Διαβάστε τους μετρητές: Συναρτήσεις (εισαγόμενες και ορισμένες), Εισαγωγές, Εξαγωγές, Τύποι, Μνήμες, Πίνακες και Καθολικές.
- Διαβάστε την αποσυναρμολόγηση στη Μορφή κειμένου WebAssembly (WAT) και στη συνέχεια πατήστε Αντιγραφή ή Λήψη .wat.
- Προσαρμόστε την έξοδο με τις επιλογές: Χρήση ονομάτων από την ενότητα name, Διπλωμένες εκφράσεις (S-expressions) και Εξαγωγές εντός συνάρτησης.
- Ανοίξτε τους πίνακες Ενότητες, Εισαγωγές και Εξαγωγές για τη διάταξη του αρχείου: κάθε ενότητα με τη μετατόπιση byte, το μέγεθος και τον αριθμό εγγραφών της.
Η μονάδα δεν μεταγλωττίζεται, δεν δημιουργείται στιγμιότυπό της και δεν εκτελείται ποτέ. Το εργαλείο διαβάζει μόνο τα byte της και τα μετατρέπει σε κείμενο, επομένως είναι ασφαλές να ελέγξετε ένα αρχείο που δεν εμπιστεύεστε.
Τι δείχνει η έξοδος WAT
Το WebAssembly έχει δύο ισοδύναμες μορφές: το συμπαγές δυαδικό .wasm που φορτώνουν τα προγράμματα περιήγησης και τα περιβάλλοντα εκτέλεσης, και τη μορφή κειμένου .wat, που προορίζεται για ανθρώπους. Ο αποσυναρμολογητής εκτυπώνει κάθε μέρος της μονάδας σε μορφή κειμένου: τύπους συναρτήσεων, εισαγωγές, σώματα συναρτήσεων, πίνακες, μνήμες, καθολικές μεταβλητές, εξαγωγές, τη συνάρτηση εκκίνησης, τμήματα στοιχείων και τμήματα δεδομένων.
Από προεπιλογή, οι εντολές παρατίθενται μία ανά γραμμή με τη σειρά της στοίβας, όπως αποθηκεύονται:
(func $add (param $a i32) (param $b i32) (result i32)
local.get $a
local.get $b
i32.add)
Με την επιλογή Διπλωμένες εκφράσεις (S-expressions), οι τελεστέοι φωλιάζουν μέσα στην εντολή που τους χρησιμοποιεί, όπως στο (i32.add (local.get $a) (local.get $b)), κάτι που συχνά είναι πιο εύκολο να παρακολουθηθεί. Η επιλογή Εξαγωγές εντός συνάρτησης γράφει το (export "add") μέσα στη συνάρτηση αντί για χωριστή λίστα.
Ονόματα, πληροφορίες αποσφαλμάτωσης και επικύρωση
Ένα αρχείο .wasm παραπέμπει σε όλα με δείκτες. Όταν ο μεταγλωττιστής κράτησε μια προσαρμοσμένη ενότητα name (συνηθισμένο στις εκδόσεις αποσφαλμάτωσης), η επιλογή Χρήση ονομάτων από την ενότητα name δείχνει τα αρχικά ονόματα όπως $factorial. Διαφορετικά, το wabt δημιουργεί ονόματα όπως $f2 ή $t0 ώστε το κείμενο να μένει ευανάγνωστο. Οι εκδόσεις παραγωγής συχνά έχουν αφαιρεμένα τα ονόματα, οπότε μια ελαχιστοποιημένη μονάδα θα δείχνει μόνο δημιουργημένα ονόματα.
Η επικύρωση ακολουθεί την προδιαγραφή του WebAssembly: οι τύποι πρέπει να ταιριάζουν στη στοίβα τελεστέων, οι δείκτες πρέπει να υπάρχουν κ.ο.κ. Μια μη έγκυρη μονάδα αποσυναρμολογείται παρ’ όλα αυτά όταν η δομή της μπορεί να διαβαστεί, με το σφάλμα επικύρωσης δίπλα της, κάτι που βοηθά όταν αποσφαλματώνετε έναν μεταγλωττιστή ή ένα δυαδικό γραμμένο στο χέρι. Τα χαρακτηριστικά μετά το MVP, όπως SIMD, νήματα, μαζικές λειτουργίες μνήμης, τύποι αναφοράς, πολλαπλές τιμές επιστροφής, tail calls, χειρισμός εξαιρέσεων, memory64 και garbage collection, είναι ενεργοποιημένα για ανάγνωση.
Το εργαλείο χρησιμοποιεί το wabt.js, την έκδοση JavaScript του WebAssembly Binary Toolkit (wasm2wat). Φορτώνεται μόνο όταν ανοίξετε ένα αρχείο.
Συχνές ερωτήσεις
Μπορώ να ανακτήσω τον αρχικό κώδικα C, C++ ή Rust;
Όχι. Το WAT είναι ευανάγνωστη μορφή του μεταγλωττισμένου δυαδικού αρχείου και όχι αποσυμπιλητής: ο πηγαίος κώδικας, τα σχόλια και οι περισσότερες πληροφορίες τύπων χάνονται μετά τη μεταγλώττιση. Τα ονόματα συναρτήσεων επιβιώνουν μόνο όταν διατηρήθηκε η ενότητα name.
Μεταφορτώνεται το αρχείο μου;
Όχι. Το αρχείο διαβάζεται και αποσυναρμολογείται στο πρόγραμμα περιήγησής σας· τίποτα δεν στέλνεται σε διακομιστή.
Γιατί το εργαλείο λέει ότι το αρχείο δεν είναι δυαδικό WebAssembly;
Κάθε μονάδα ξεκινά με τα τέσσερα byte \0asm που ακολουθούνται από την έκδοση 1. Ένα αρχείο με διαφορετικό περιεχόμενο, συμπιεσμένο με gzip ή Brotli, ή ένα component WebAssembly (το νεότερο μοντέλο components) θα απορριφθεί.
Γιατί το πλαίσιο κειμένου είναι κομμένο;
Οι πολύ μεγάλες μονάδες μπορούν να παράγουν εκατομμύρια γραμμές. Το πλαίσιο κειμένου δείχνει το πρώτο μέρος ώστε η σελίδα να μένει αποκρίσιμη· το Λήψη .wat αποθηκεύει ολόκληρο το κείμενο.
Μπορώ να εκτελέσω ή να δοκιμάσω τη μονάδα εδώ;
Όχι. Η μονάδα σκόπιμα δεν αποκτά ποτέ στιγμιότυπο, ώστε ο κώδικάς της να μην μπορεί να εκτελεστεί στη σελίδα. Για να τη δοκιμάσετε, φορτώστε την στο δικό σας έργο ή σε ένα περιβάλλον εκτέλεσης όπως το wasmtime ή το Node.js.
Σχετικά εργαλεία
- Εξερευνητής AST JavaScript Επικολλήστε κώδικα JavaScript και εξερευνήστε το αφηρημένο συντακτικό δέντρο (ESTree, Acorn) στο πρόγραμμα περιήγησής σας. Εξαγωγή του AST σε JSON.
- Δημιουργός hash Δημιουργήστε hash MD5, SHA-1, SHA-256 και SHA-512 για κείμενο ή αρχεία οποιουδήποτε μεγέθους και επαληθεύστε αθροίσματα ελέγχου στο πρόγραμμα περιήγησής σας.
- Κωδικοποίηση και αποκωδικοποίηση Base64 Δωρεάν κωδικοποίηση και αποκωδικοποίηση Base64 με πλήρη υποστήριξη UTF-8 και επιλογή base64url. Λειτουργεί στο πρόγραμμα περιήγησής σας.