
Validazione differenziale esaustiva di tutte le 4,3 miliardi di codifiche di istruzioni AArch64.
Una mappa completa di dove i decoder AArch64 divergono dall'architettura.
Silica esamina ognuna delle 4.294.967.296 possibili parole di istruzione A64, confronta Capstone, LLVM e Unicorn con la specifica leggibile da macchina di Arm, e trasforma le differenze in evidenze riproducibili.
Che un disassembler dichiari "valido" è facile. Sapere se ha ragione è più difficile. La maggior parte dei test differenziali può rivelare che gli strumenti sono in disaccordo, ma non può identificare la risposta corretta senza un oracolo indipendente. Silica usa il rilascio XML di Arm come tale oracolo.
A64 rende possibile un esperimento insolitamente completo: le istruzioni sono esattamente larghe 32 bit, quindi l'intero spazio di codifica è finito e praticabile da enumerare. Silica sfrutta questa proprietà. I risultati di validità riportati di seguito non sono una stima o una campagna di fuzzing; ogni possibile parola è stata verificata.
Questi risultati usano ISA_A64_xml_A_profile-2026-06_mc (Armv9.6-A). La scansione è stata
suddivisa in 256 shard verificati indipendentemente che coprono tutte le 2³² codifiche.
| Risultato | Conteggio | Quota dello spazio totale |
|---|---|---|
| Allocato dalla specifica Arm | 1.799.435.776 | 41,9% |
| Non allocato dalla specifica Arm | 2.495.531.520 | 58,1% |
| Disaccordi di validità trovati | 723.801.678 | 16,9% |
| Riproduttori minimi pronti per l'upstream | 10 | — |
Accordo con la specifica sulla validità di una codifica:
| Decoder | Accordo | Visuale |
|---|---|---|
| Capstone | 84,8% | █████████████████████████░░░░░ |
| LLVM | 87,6% | ██████████████████████████░░░░ |
| Unicorn | 88,3% | ██████████████████████████░░░░ |
Il grande divario di validità ha cause identificabili. Unicorn verifica la validità
eseguendo un'istruzione e osservando i trap, mentre gli altri oracoli decodificano
senza esecuzione. Un piccolo numero di regioni è anche influenzato da condizioni
UNDEFINED in fase di decodifica che l'oracolo della specifica compilata non valuta.
Silica registra queste limitazioni invece di attenuarle nel risultato.
Confrontare mnemoniche e operandi renderizzati è molto più costoso che registrare un bit di validità. Silica valuta quindi il testo su un campione deterministico di 1.000.000 di parole estratte da 1.266.064.016 candidate in cui tutti e quattro gli oracoli considerano la codifica valida. Questo è un risultato campionato ed è deliberatamente tenuto separato dalle cifre esaustive di validità.
| Classificazione all'interno del campione | Record | Quota |
|---|---|---|
| Rendering degli operandi diverso | 862.648 | 86,3% |
| Normalizzazione da rivedere | 137.352 | 13,7% |
Il campione è utile per individuare il lavoro di normalizzazione e presentazione; non pretende una copertura esaustiva di ogni rendering testuale.
Il motore di scansione produce un grande dataset di ricerca. silica-scope è l'applicazione terminale complementare che rende quel dataset accessibile. Apre una directory di artefatti Silica completata e consente di sfogliare le metriche principali, ispezionare la mappa di codifica a 256 shard, filtrare i disaccordi, cercare qualsiasi parola a 32 bit e leggere i riproduttori pronti per la segnalazione.
Installalo da PyPI con Python 3.11 o superiore:
pipx install silica-scope
Poi eseguilo da un checkout di Silica o puntalo a una directory di artefatti:
silica-scope
silica-scope /path/to/silica/artifacts
silica-scope --report
silica-scope è un lettore in puro Python senza dipendenze da decoder nativi. Non
avvia la scansione esaustiva e gestisce con grazia il set di artefatti pubblicati più piccolo
del repository. Consulta la guida al lettore terminale
per i pannelli, i controlli da tastiera e le opzioni di scoperta degli artefatti.
flowchart LR
XML["Arm XML specification"] --> SPEC["compiled spec oracle"]
SPEC --> SWEEP["parallel 32-bit sweep"]
CAP["Capstone"] --> SWEEP
LLVM["LLVM"] --> SWEEP
UNI["Unicorn"] --> SWEEP
SWEEP --> MAP["validity bitmaps"]
MAP --> DIFF["exhaustive XOR comparison"]
DIFF --> CORPUS["classified disagreement corpus"]
CORPUS --> OUT["metrics · reproducers · result hash"]Il percorso ad alto volume è scritto in Rust e chiama ciascun decoder in-process. Memorizza un bit per codifica per oracolo, il che mantiene il confronto esaustivo compatto e rende il disaccordo una diretta operazione su bitmap. I crash vengono bisecati fino alla parola di istruzione esatta.
Python gestisce la compilazione della specifica, la normalizzazione, il reporting e il livello di verifica indipendente. Gli schemi degli artefatti, le regole di campionamento e le limitazioni note sono documentati in docs/formats.md.
Crea l'ambiente con versioni bloccate e verifica che gli input locali richiesti siano disponibili:
micromamba create -y -p ./.venv -f environment.yml
micromamba run -p ./.venv silica doctor
La specifica XML di Arm non è inclusa nel repository a causa della sua licenza. silica doctor
segnala dove Silica si aspetta di trovarla e qualsiasi altro prerequisito mancante.
Per eseguire l'intera pipeline da un checkout preparato:
make all
Questa è una scansione completa di 2³², non un rapido smoke test. Produce l'oracolo compilato, i record degli shard, le bitmap di validità, il corpus dei disaccordi, le metriche pubblicate, i riproduttori e un hash del risultato SHA-256 stabile.
Sette verificatori indipendenti ricalcolano le affermazioni del progetto dagli artefatti grezzi. Non si fidano di un riepilogo generato, e ogni verificatore ha una fixture che dimostra che rileva il difetto da cui si protegge. Non esiste uno stato saltato o provvisorio.
micromamba run -p ./.venv silica verify
Le versioni bloccate dei decoder e un hash del risultato ricalcolato da zero rendono comparabili esecuzioni separate. Gli obiettivi di verifica e il loro stato attuale sono registrati in GOALS.yml.
Silica attualmente copre la decodifica A64 base e Advanced SIMD. SVE, SVE2, SME, A32/T32, RISC-V, i round trip dell'assembler e i test di esecuzione generali sono fuori dallo studio v1.
L'ispirazione più vicina è Sandsifter, che esplora lo spazio di istruzioni a lunghezza variabile di x86. Silica applica lo stesso spirito di scetticismo sistematico ad AArch64, dove le codifiche a larghezza fissa e una specifica indipendente consentono un confronto completo e con giudizio.
Apache 2.0 — vedi LICENSE