2012-01-23 13 views
8

¿Existe una forma fácil de crear un bytecode de Python a partir de una lista de 2 tuplas con opcodes y sus argumentos?Crear código de bytes de Python de la lista de códigos de operación y argumentos?

Por ejemplo:

>>> bytecode_compile([ 
     ('LOAD_CONST', 2), 
     ('STORE_FAST', 'a'), 
     ('LOAD_FAST', 'a'), 
     ('RETURN_VALUE',)]) 
'd\x01\x00}\x00\x00|\x00\x00S' 
+1

¿Qué tiene de malo escribir el código de Python y usar el compilador de Python para hacer esto? –

+2

http://code.google.com/p/byteplay/ – reclosedev

+0

@ S.Lott Es suficiente. No estoy seguro de por qué estoy tratando de hacer las cosas tan difíciles. – exupero

Respuesta

2

No creo que una pitón "asamblea de código de bytes" existe ensamblador, pero puede que no sea tan difícil de construir uno usted mismo. En el código fuente de Python en Python-X.Y.Z/Include/opcode.h, todos los códigos de byte para los códigos de operación se enumeran con qué argumentos toman.

+0

También puede obtener una lista similar con el módulo' dis', es decir, 'len (dis.opmap)' devuelve 101 contra 103 códigos de operación en 'opcode.h' de Python 3.4.3. – ilyaigpetrov

1

Escribí extensamente acerca de esto here así que no lo repetiré pero daré algunos comentarios resumidos.

Definitivamente es factible, pero me pregunto qué tan útil será en general. El enlace se refiere a cómo ejecutar y escribir esas cosas.

Bytecode está sujeto a cambios, tanto en términos de código de operación, o nombres de código de operación, o la semántica de los códigos de operación entre las versiones. De hecho, en Python 3.6 y más allá de un bytecode se convierte en un código de palabra.

Si decide seguir por esta ruta xdis recientemente ha agregado una función de list2bytecode() para hacer esto.

Cuestiones relacionadas