18.10 dis -- Pythonバイトコードの逆アセンブラ

disモジュールはPythonバイトコードを逆アセンブルしてバイトコードの解析を助けます。Pythonアセンブラがないため、このモジュールがPythonアセンブリ言語を定義しています。このモジュールが入力として受け取るPythonバイトコードはファイルInclude/opcode.hに定義されており、コンパイラとインタプリタが使用しています。

例: 関数myfuncを考えると:

def myfunc(alist):
    return len(alist)

次のコマンドをmyfunc()の逆アセンブリを得るために使うことができます:

>>> dis.dis(myfunc)
  2           0 LOAD_GLOBAL              0 (len)
              3 LOAD_FAST                0 (alist)
              6 CALL_FUNCTION            1
              9 RETURN_VALUE        
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE

(``2''は行番号です)。

disモジュールは次の関数と定数を定義します:

dis( [bytesource])
bytesourceオブジェクトを逆アセンブルします。bytesourceはモジュール、クラス、関数、あるいはコードオブジェクトのいずれかを示します。モジュールに対しては、すべての関数を逆アセンブルします。クラスに対しては、すべてのメソッドを逆アセンブルします。単一のコードシーケンスに対しては、バイトコード命令ごとに一行をプリントします。オブジェクトが与えられない場合は、最後のトレースバックを逆アセンブルします。

distb( [tb])
トレースバックのスタックの先頭の関数を逆アセンブルします。Noneが渡された場合は最後のトレースバックを使います。例外を引き起こした命令が表示されます。

disassemble( code[, lasti])
コードオブジェクトを逆アセンブルします。lastiが与えられた場合は、最後の命令を示します。出力は次のようなカラムに分割されます:

  1. 各行の最初の命令に対する行番号。
  2. 現在の命令。"-->"として示されます。
  3. ラベル付けされた命令。">>"とともに表示されます。
  4. the address of the instruction,
  5. 命令のアドレス。
  6. 演算コード名。
  7. 演算パラメータ。
  8. 括弧の中のパラメータのインタプリテーション。

パラメータインタープリテーションはローカルおよびグルーバル変数名、定数値、分岐目標、そして比較演算子を認識します。

disco( code[, lasti])
disassembleの別名。よりタイプしやすく、以前のPythonリリースと互換性があります。

opname
演算名。一連のバイトコードを使ってインデキシングできます。

cmp_op
すべての比較演算名。

hasconst
定数腹メータを持つ一連のバイトコード。

hasfree
自由変数にアクセスする一連のバイトコード。

hasname
名前によって属性にアクセスする一連のバイトコード。

hasjrel
相対ジャンプターゲットをもつ一連のバイトコード。

hasjabs
絶対ジャンプターゲットをもつ一連のバイトコード。

haslocal
ローカル変数にアクセスする一連のバイトコード。

hascompare
ブール演算の一連のバイトコード。



ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。