disモジュールは、バイトコードを逆アセンブルすることで、バイトコードの解析をサポートします。
パイソンアセンブラがないので、このモジュールがパイソンのアセンブラ言語を定義します。このモジュールが入力として受け取るバイトコードは、"Include/opcode.h"ファイル中で定義されていて、コンパイラやインタープリタで使用されます。
例: 関数myfuncを定義します。
def myfunc(alist):
return len(alist)
myfunc()を逆アセンブルすると、次のようなコマンドを得ることができます。
>>> dis.dis(myfunc)
0 SET_LINENO 1
3 SET_LINENO 2
6 LOAD_GLOBAL 0 (len)
9 LOAD_FAST 0 (alist)
12 CALL_FUNCTION 1
15 RETURN_VALUE
16 LOAD_CONST 0 (None)
19 RETURN_VALUE
disモジュールは、以下のような関数を定義します。
- dis ([bytesource])
-
bytesourceオブジェクトを逆アセンブルします。bytesourceは、クラス、メソッド、関数、コードオブジェクトのいづれかを示しています。クラスの場合は、全てのメソッドを逆アセンブルします。 たった1個のコードシーケンスの場合は、バイトコード命令ごとに1行表示します。オブジェクトが指定されてない場合は、最後のトレースバックを逆アセンブルします。
- distb ([tb])
-
トレースバックのスタックの先頭の関数を逆アセンブルします。最後のトレースバックが使われ、noneがあればパスされます。例外を引き起こす命令は、表示されます。
- disassemble (code[, lasti])
-
コードオブジェクト(lastiが与えられた場合は最後の命令を表すコードオブジェクト)を逆アセンブルします。出力は以下のようなカラムに分けられます。
- 1.
- "->"で指し示している、現在の命令
- 2.
- ">>"が付いた、ラベル付きの命令
- 3.
- 命令のアドレス
- 4.
- オペレ−ションコード名
- 5.
- オペレーションパラメーター
- 6.
- カッコ内にパラメータの説明
パラメーターの説明は、ローカル変数名とグローバル変数名、定数値、branch targets、比較演算子を評価します。
- disco (code[, lasti])
-
disassembleと同じです。タイプしたり、以前リリースされたパイソンと互換性を保つのに、より便利です。
- opname
-
バイトコードを使って指し示すことができるオペレーション名のシーケンス
- cmp_op
-
全ての比較演算の名前のシーケンス
- hasconst
-
定数パラメータを持つバイトコードのシーケンス
- hasname
-
名前で属性にアクセスするバイトコードのシーケンス
- hasjrel
-
相対的なジャンプターゲットを持つバイトコードのシーケンス
- hasjabs
-
絶対的なジャンプターゲットを持つバイトコードのシーケンス
- haslocal
-
ローカル変数にアクセスするバイトコードのシーケンス
- hascompare
-
論理演算のバイトコードのシーケンス
guido@python.org