Aggiungi CreoBom.cs: parser esatto del formato .asm via record binari

Porting C# del reverse engineering della struttura a record del .asm Creo
(sezione "members" + parametro "ConfigName" per le family table): legge
esattamente i componenti diretti e genera la stessa BOM esportata da Creo,
senza le euristiche testuali (conteggio occorrenze) di AssemblyComponentScanner.
Resta uno script di analisi indipendente, non integrato nella GUI.

Aggiorna anche formato-asm.md (non e' piu' vero che "non esiste un parser
strutturale") e architettura.md (script mancante nell'elenco).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5 committed 2026-09-21 15:41:14 +02:00
1 parent 3cfc040fb0
commit 35009b5cd3
4 files changed
+631 -4

No files matched your search

+17 -4
View File
@@ -1,10 +1,23 @@
# Come leggere un .asm Creo per dedurne i componenti
Il file `.asm` di Pro/ENGINEER-Creo è un formato binario proprietario, non
documentato pubblicamente. Non esiste un parser strutturale completo in questo
progetto: l'estrazione dei componenti si basa su un'euristica testuale,
validata a mano confrontando l'output con l'albero reale mostrato da Creo.
Questo documento riassume cosa si è osservato e i suoi limiti.
documentato pubblicamente. Questo documento descrive l'euristica testuale usata da
`AssemblyComponentScanner.cs` (GUI, fase "Trova componenti referenziati"/"Verifica
completezza") e dagli script che risolvono l'albero componenti contro `cad_index.db`
(`ExtractCreoStrings.cs`, `BomViaDb.cs`): conta le occorrenze di stringhe candidate nel
testo binario, validata a mano confrontando l'output con l'albero reale mostrato da Creo.
Riassume cosa si è osservato e i suoi limiti, in particolare i falsi positivi che
un conteggio testuale non può escludere con certezza (riferimenti fantasma, componenti
soppressi con placement residuo — vedi sotto).
Un reverse engineering successivo ha invece decodificato la **struttura a record** del
file (non solo pattern testuali): legge esattamente la sezione `members` di un assieme,
senza contare occorrenze né rischiare i falsi positivi descritti in questo documento.
Implementato in [`scripts/CreoBom.cs`](../scripts/CreoBom.cs), documentato in
[`formato-asm-record.md`](formato-asm-record.md). Resta però uno script di analisi
indipendente: legge solo `.asm` locali dato un percorso di ricerca esplicito (non
`cad_index.db`), e non è integrato in `AssemblyComponentScanner`/nella GUI, che
continuano a usare l'euristica descritta qui.
## Struttura osservata