2012-01-23 10 views
8

オペコードとその引数を持つ2タプルのリストからPythonバイトコードを簡単に作成する方法はありますか?例えばオペコードと引数のリストからPythonバイトコードを作成しますか?

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

Pythonコードを記述し、Pythonコンパイラを使用してこの問題を解決するにはどうしたらいいですか? –

+2

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

+0

@ S.Lott Fair十分です。どうして私は物事をとても難しくしようとしているのか分かりません。 – exupero

答えて

2

私は、Python、「バイトコードアセンブリ」アセンブラが存在するとは思わないが、それは難しいことは1を自分で構築することではないかもしれません。 Python-X.Y.Z/Include/opcode.hのpythonソースコードでは、opcodeのバイトコードはすべて、どのような引数を使ってリストされています。

+0

' dis'モジュールと同様のリストを得ることもできます。 'len(dis.opmap)'は、Python 3.4.3の 'opcode.h'の103個のオペコードに対して101を返します。 – ilyaigpetrov

1

私は長年この約hereを書いていましたので、私はそれを繰り返すことはしませんが、いくつかの要約コメントを与えます。

これは間違いなく実行可能ですが、どの程度一般的に役立つのだろうかと思います。このリンクは、そのようなものを実行して書き出す方法に入ります。

バイトコードは、オペコード、オペコード名、またはバージョン間のオペコードのセマンティクスの両方で変更されることがあります。実際、Python 3.6以降では、バイトコードはwordcodeになります。

ただし、このパスに進むことを決定した場合は、xdisが最近これを行うためにlist2bytecode()機能を追加しました。

関連する問題