Python è sicuramente uno dei linguaggi di programmazione che ha riscosso maggior successo durante il 2018. Questo perché viene implementato in decine di progetti di IoT e machine learning che sono diventati estremamente popolari negli ultimi anni. Oggi vogliamo presentarvi un progetto dedicato completamente all’elaborazione del codice Python: uncompyle6.

uncompyle6 è un cross-version decompiler e fragment decompiler nativo per Python. Si tratta del successore dei progetti decompyle, uncompyle e uncompyle2. Questi ultimi sono stati tutti abbandonati dallo sviluppatore che li ha creati, anche se il loro codice è sempre disponibile su Github, per focalizzarsi unicamente sul suo nuovo progetto. uncompyle6 traduce il bytecode Python nel codice sorgente Python equivalente. Può gestire bytecode da Python 1.3 alla versione 3.7, quindi coprendo oltre 22 anni di release Python.

uncompyle6 è molto di più di normale hacky decompiler. Sfruttando la tecnologia di compilazione alla base del linguaggio questo tool riesce a generare un parse tree del programma a partire dalle istruzioni. A causa di questa configurazione i nodi ai livelli superiori ricordano quelli presenti su AST Python. Grazie a tali feature un developer può agilmente classificare e capire cosa succede nelle varie sezioni del bytecode Python.

Un altro elemento che rende questo progetto diverso dagli altri decompiler bytecode CPython è la capacità di estrapolare solo alcuni frammenti di codice sorgente e fornire informazioni sul codice sorgente intorno ad un dato bytecode offset.

Lo sviluppatore di uncompyle6 ha usato i tree fragment per estrapolare frammenti di codice in fase di esecuzione all’interno del debugger di trepan. Per questo motivo gli offset del bytecode sono registrati e associati ai fragment del codice sorgente.

Il deploy dei Python fragment da accesso ad un offset dell’istruzione utile per mostrare le stack traces che posso essere incorporate in qualsiasi programma che vuole mostrare una posizione in modo più dettagliato rispetto a un semplice numero di riga in fase di runtime.

Questo codice può essere utilizzato anche quando le informazioni sul codice sorgente non esistono o c’è solo un bytecode. uncompyle6 si presenta dunque come una valida alternativa ad altri decompiler presenti sul mercato.

Via Uncompyle6