[Python-de] Bytecode von Python
Martin v. Loewis
martin at v.loewis.de
Sat Oct 19 22:57:24 EDT 2002
Markus Burrer <Markus.Burrer at EmbedIt.de> writes:
> gibt es eigentlich eine Doku zu dem compilierten Code von Python Programmen?
> Ich möchten, wenn das überhaupt geht was ich vorhab, einen Interpreter
> (keinen Conpiler) schreiben, der die *.pyc Dateien ausführen kann.
> Gibt es hier Dokus? Hat da jemand Erfahrungen?
Der Bytecode ist dokumentiert (siehe Gersons Nachricht). Das
.pyc-Format ist nicht dokumentiert, aber leicht zu verstehen:
- 4-byte magic
- 4-byte time-stamp
- marshal-daten eines Codeobjekts
Das marshal-Format ist ebenfalls undokumentiert, besteht aber aus
einem Type-Code und einem passenden Wert. Die Codes sind (siehe
marshal.c):
#define TYPE_NULL '0'
#define TYPE_NONE 'N'
#define TYPE_FALSE 'F'
#define TYPE_TRUE 'T'
#define TYPE_STOPITER 'S'
#define TYPE_ELLIPSIS '.'
#define TYPE_INT 'i'
#define TYPE_INT64 'I'
#define TYPE_FLOAT 'f'
#define TYPE_COMPLEX 'x'
#define TYPE_LONG 'l'
#define TYPE_STRING 's'
#define TYPE_TUPLE '('
#define TYPE_LIST '['
#define TYPE_DICT '{'
#define TYPE_CODE 'c'
#define TYPE_UNICODE 'u'
Die weiteren Daten hängen dann vom Code ab. Bei 'c' (Code-Objekt)
folgen dann:
- argcount (4 Byte)
- nlocals (4 Byte)
- stacksize (4 Byte)
- flags (4 Byte)
- Objekt: Byte-Code
- Objekt: Konstanten
- Objekt: Namen
- Objekt: Variablen-Namen
- Objekt: Freie Variablen
- Objekt: Cell-Variablen
- Objekt: Dateiname
- Erste Zeilennnummer (4 Byte)
- Objekt: Zeilennummern
(Objekt bedeutet, dass da wieder ein Type-Code kommt, gefolgt vom Wert)
usw.
Ciao,
Martin
More information about the Python-de
mailing list