python的bytecode文件格式
2010-11-28 10:00
399 查看
仅供参考,最直接的方法当然是看Python/marshal.c
1. bytecode file general format
------------------------------------------------
| 4 bytes | 4 bytes | ~
|magic number | modification time | byte codes
-----------------------------------------------
2. bytecode detail format
2.1 element type(grab from python)
#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_BINARY_FLOAT 'g'
#define TYPE_COMPLEX 'x'
#define TYPE_BINARY_COMPLEX 'y'
#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'
#define TYPE_UNKNOWN '?'
#define TYPE_SET '<'
#define TYPE_FROZENSET '>'
2.2 go through type by type
--TYPE_NULL, TYPE_NONE, TYPE_STOPITER, TYPE_ELLIPSIS, TYPE_FALSE, TYPE_TRUE
just a byte of placeholder
--TYPE_INT
little endian
|TYPE_INT|byte0|byte1|byte2|byte3|
--TYPE_INT64
|TYPE_INT64|LOW 4 bytes|HIGH 4 bytes|
--TYPE_LONG
TBD
--TYPE_FLOAT(ascii codec)
| byte 0 | byte 1 | byte 2...n|
|TYPE_FLOAT|string length of float number|float string|
--TYPE_STRING
|TYPE_STRING|string length(4bytes)|string|
--TYPE_TUPLE
|TYPE_TUPLE|tuple length(4bytes)|objects|
--TYPE_LIST
|TYPE_LIST|list length(4bytes)|objects|
--TYPE_DICT (null terminated)
|TYPE_DICT|key|val|NULL|
--TYPE_SET
|TYPE_SET|element number(4bytes)|element|
--TYPE_CODE
|argument count|keyword argument count|locals number|stack size|
|flags|code|consts|names|varnames|freevars|cellvars|file name|name|
|fistlineno|line number table|
1. bytecode file general format
------------------------------------------------
| 4 bytes | 4 bytes | ~
|magic number | modification time | byte codes
-----------------------------------------------
2. bytecode detail format
2.1 element type(grab from python)
#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_BINARY_FLOAT 'g'
#define TYPE_COMPLEX 'x'
#define TYPE_BINARY_COMPLEX 'y'
#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'
#define TYPE_UNKNOWN '?'
#define TYPE_SET '<'
#define TYPE_FROZENSET '>'
2.2 go through type by type
--TYPE_NULL, TYPE_NONE, TYPE_STOPITER, TYPE_ELLIPSIS, TYPE_FALSE, TYPE_TRUE
just a byte of placeholder
--TYPE_INT
little endian
|TYPE_INT|byte0|byte1|byte2|byte3|
--TYPE_INT64
|TYPE_INT64|LOW 4 bytes|HIGH 4 bytes|
--TYPE_LONG
TBD
--TYPE_FLOAT(ascii codec)
| byte 0 | byte 1 | byte 2...n|
|TYPE_FLOAT|string length of float number|float string|
--TYPE_STRING
|TYPE_STRING|string length(4bytes)|string|
--TYPE_TUPLE
|TYPE_TUPLE|tuple length(4bytes)|objects|
--TYPE_LIST
|TYPE_LIST|list length(4bytes)|objects|
--TYPE_DICT (null terminated)
|TYPE_DICT|key|val|NULL|
--TYPE_SET
|TYPE_SET|element number(4bytes)|element|
--TYPE_CODE
|argument count|keyword argument count|locals number|stack size|
|flags|code|consts|names|varnames|freevars|cellvars|file name|name|
|fistlineno|line number table|
相关文章推荐
- 使用Python脚本获取指定格式文件列表的方法
- python 小练习之山寨版markdown格式txt文件转html文件
- python批量修改文件编码格式的方法
- NetworkX学习笔记-3-Python中输出Gephi文件格式的方法
- python的tarfile模块实例 python把文件夹压缩成tar格式文件的例子
- Python实现把json格式转换成文本或sql文件
- Python:将utf-8格式的文件转换成gbk格式的文件
- python处理文本文件并生成指定格式的文件
- Python读取CSV文件:UnicodeDecodeError: 'gbk' codec can't decode byte 0xba ....illegal multibyte sequence
- python第三方包的windows安装文件exe格式
- python 读写csv格式的文件
- 利用Python PIL、cPickle将图片读取和保存为pkl格式文件
- python生成sitemap格式文件
- 20行Python代码教你批量将PDF文件转为Word格式
- python 写json格式字符串到文件
- 简单介绍TensorFlow(Python)如何调用Matlab产生的mat格式文件
- python读写hdf5及cdf格式文件
- Python pyc文件与code对象相关用法
- python 3.5 对文件格式进行转换
- 使用Python批量修改PPTX文件中文本框格式