2012-05-18 17 views
6

E 'possibile convertire programmi Python ad un microprocessore linguaggio assembly standard come IEEE-694? La sintassi di montaggio è vicino a this one o quest'altro: http://www.ethicalhacker.net/content/view/152/2/Programma Python in un assembly standard?

+0

ho provato un sacco. Ho trovato software come LLVM ma il risultato non era quello atteso. – Academia

+0

Dai un'occhiata al progetto [Python on a chip] (http://code.google.com/p/python-on-a-chip/). –

+2

qual è il problema che stai effettivamente cercando di risolvere? – SingleNegationElimination

risposta

8

Compile python to C, quindi utilizzare un compilatore C di vostra scelta per ricevere verso il basso per il montaggio.

In alternativa, utilizzare PyPy, specificando LLVM come destinazione e utilizzare LLVM Static Compiler per ottenere il linguaggio assembly per l'architettura di destinazione.

+0

Non so come usare LLVM per ottenere un assembly standard e di base come IEEE-694. – Academia

+0

Capisco l'idea di "assemblaggio standard", ma non è essenzialmente ciò che è il bytecode LLVM? –

2

Poiché Python è un linguaggio tipizzato in modo dinamico, questo sarebbe possibile solo se il programma di montaggio avrebbe utilizzato il Runtime Environment/libreria di Python per ottenere in modo dinamico gli oggetti.

così sarebbe possibile solo con un certo overhead.

Ma c'è RPython dal progetto PyPy. È un sottoinsieme ristretto del linguaggio Python (non è più digitato in modo dinamico e manca di molti moduli dalla libreria standard di Python). I programmi RPython possono essere tradotti in codice macchina (AFAIK genera codice C come codice intermedio).

stesso Python genera un codice intermedio per la sua macchina virtuale. Se vuoi dare un'occhiata a questo codice, usa il modulo dis dalla libreria standard Python. Questo genera una rappresentazione simile all'assemblaggio della tua funzione Python. Tieni presente che un microprocessore "reale" non sarebbe in grado di usarlo e che il risultato potrebbe cambiare con la versione di Python che stai utilizzando.

+0

Voglio ottenere un assembly di base e di basso livello (senza macro). Non lo eseguirò su un vero microprocessore. – Academia

1

Non nello stesso modo di C, FORTRAN, COBOL, ecc. Le lingue che supportano il calcolo lambda o la gestione automatica della memoria non possono essere compilate direttamente all'assemblaggio. Un interprete può, tuttavia, essere fornito in microcodice o in un programma di bootstrap per colmare il divario e consentire "compilato" Python, LISP, ecc. (Alcune operazioni, come la garbage collection, vengono comunque eseguite all'interno dell'interprete incorporato nel pacchetto compilato binario.)

+0

Grazie per inf. In realtà, sto pensando di compilare Python in C, quindi di smontare con GDB. Ma ancora cercando di trovare qualcosa di meglio. – Academia

Problemi correlati