|
|
|
|
Strumenti |
15-05-2009, 10:24 | #1 |
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
[PYTHON] Disassemblare
Per varie ragioni sono interessato ad effettuare analisi statica su alcuni moduli in python. Avendo già esperienza con il CIL penso che il bytecode di python non possa crearmi troppi problemi, ma al momento non so come ottenere un dump del bytecode di un modulo (.pyo)
Dunque la domanda è se è possibile farlo, quanto agevolmente e se eventualmente insieme al listato è possibile avere anche informazioni riguardo al file offset a cui si trova l'istruzione. Infine gradirei sapere se (a fini di instrumentation) esiste la possibilità di modificare il bytecode e salvare un nuovo modulo contenente le modifiche apportate e in caso come fare Grazie anticipatamente |
16-05-2009, 10:01 | #2 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
In alternativa potresti usare il programma che ho scritto per wpython e che è in grado di generare anche qualche statistica. Lo trovi qui. Senza parametri esegue la compilazione di tutti i file .py che trova nella libreria standard (nelle cartelle Lib e Tools, per la precisione). Se ci sono dei parametri, invece, è in grado di compilare sia i singoli file che le intere cartelle specificate. Se, oltre alle statistiche, ti serve visualizzare anche il bytecode di tutti gli oggetti che ne hanno, basta mettere come primo parametro -print. A differenza del modulo dis, è in grado di visualizzare ricorsivamente tutti gli oggetti dotati di codice che riesce a trovare all'interno di altri oggetti. Quindi l'output può essere anche molto lungo. Quote:
Tipo questo che carica un file .pyc (ma penso vada bene anche per i .pyo), eseguendo l'unmarshalling dei dati (tramite un'apposita libreria). Quote:
Comunque modificare direttamente i file .pyc è abbastanza complicato, e non ho trovato in giro programmi in grado di farlo. Quindi dovresti fartelo tu. Se invece hai il file .py, puoi, ad esempio, rimpiazzare il bytecode prodotto normalmente dal compilatore con uno che hai assemblato tu con byteplay. Personalmente seguirei questa strada, che è la più semplice.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:29.