2012-01-23 13 views
8

Czy istnieje prosty sposób tworzenia kodu bajtowego Pythona z listy 2-krotnej z opkodami i ich argumentami?Tworzenie kodu bajtowego Pythona z listy kodów i argumentów?

Na przykład:

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

Co jest nie tak z pisaniem kodu Pythona i używaniem tego kompilatora Python? –

+2

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

+0

@ S.Lott Wystarczająco fair. Nie wiem, dlaczego próbuję sprawić, by było to tak trudne. – exupero

Odpowiedz

2

Nie sądzę Python „Montaż kodu bajtowego” assembler istnieje, ale to nie może być tak, że trudno zbudować samemu. W kodzie źródłowym Pythona w Python-X.Y.Z/Include/opcode.h, wszystkie kody bajtów dla kodów operacyjnych są wymienione wraz z określonymi argumentami.

+0

Możesz również uzyskać podobną listę z modułem' dis', f.e. 'len (dis.opmap)' zwraca 101 przeciw 103 opkodom w 'opcode.h' w Pythonie 3.4.3. – ilyaigpetrov

1

Napisałem obszernie o tym here, więc nie będę tego powtarzać, ale podam kilka podsumowujących komentarzy.

Jest to zdecydowanie wykonalne, ale zastanawiam się, jak ogólnie będzie ono użyteczne. Link do tego, jak uruchomić i napisać takie rzeczy.

Kod bajtowy może ulec zmianie zarówno pod względem kodu operacyjnego, jak i nazw kodów operacyjnych lub semantyki kodów operacji między wersjami. W rzeczywistości w Pythonie 3.6 i poza nim kod bajtowy staje się kodem słownym.

Jeśli jednak zdecydujesz się zejść tą ścieżką, xdis ostatnio dodał funkcję list2bytecode(), aby to zrobić.