J'ai besoin de créer un graphe d'appel de la fonction python, puis de modifier le bytecode de certaines fonctions.Comment obtenir un objet de code de fonction à partir du bytecode?
j'ai commencé à jouer avec le démontage et constaté que la fonction est faire par MAKE_FUNCTION
opcode et l'objet de code en quelque sorte passé à ce
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')
D'accord, je trouve les racines du graphe d'appels dans ce dossier, mais ce qu'il faut faire prochain? Comment puis-je obtenir cet objet de code?
Um ... Je ne vois pas comment cela répond à ma question. J'ai un fichier pyc, je l'ai démonté avec 'dis.dis'. Alors quoi? – user1685095
Donc vous avez la fonction, ou vous ne pouviez pas l'avoir démonté avec 'dis'. Donc l'objet code de la fonction 'f' est' f.func_code' et la chaîne bytecode est 'f.func_code.co_code'. Vous dites que vous voulez modifier le bytecode, et une fois que vous faites cela, vous devrez en construire une nouvelle, ce que vous pouvez faire en utilisant le code et les types de fonctions. – kindall
Que faire si je n'ai pas de fichiers source et que je n'ai que des fichiers compilés? – user1685095