[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