私はPython関数のコールグラフを作成し、いくつかの関数のバイトコードを変更する必要があります。バイトコードからファンクションコードオブジェクトを取得するには?
私は解体してプレイし始めて、その機能を発見したがMAKE_FUNCTION
オペコードと何とかそれに
32 96 LOAD_CONST 25 ((None, None, True, 'off', None, False))
98 LOAD_CONST 15 (<code object foobar at 0x7fc46bff6d20, file "foo.py", line 25>)
100 LOAD_CONST 16 ('foo')
102 MAKE_FUNCTION 1
104 STORE_NAME 15 ('fun')
オーケーを渡されたコードオブジェクトによって作成され、私は、このファイルにコールグラフの根を見つけましたが、何をすべきか次?実際にこのコードオブジェクトを取得するにはどうすればよいですか?
ええと...私の質問にどう答えるかわかりません。私はpycファイルを持っています、私は 'dis.dis'でそれを逆アセンブルしました。じゃあ何? – user1685095
あなたはその機能を持っているか、 'dis'で逆アセンブルすることはできませんでした。したがって、関数 'f'のコードオブジェクトは' f.func_code'で、バイトコード文字列は 'f.func_code.co_code'です。バイトコードを変更したい場合は、コードと関数の種類を使用して新しい関数を作成する必要があります。 – kindall
ソースファイルがなく、コンパイルされたファイルのみを持っているとどうなりますか? – user1685095