Python跨版本字节码汇编器
项目描述
xasm
注意:此版本为测试版
跨Python字节码汇编器
介绍
Python xasm 模块提供了汇编例程,并有一个命令可以汇编不同版本的Python的字节码。
以下是一些潜在用途
当您没有源代码时,对现有的Python字节码进行小型修补
制作自定义且高效的字节码
编写指令级优化编译器
探索和学习Python字节码
防止uncompyle6反汇编字节码(至少现在是这样)
这将支持从Python版本1.0到3.8或更早的版本的字节码。
此代码需要Python 2.7或更高版本。
汇编文件
将填写更多详细信息,但以下是一些原则
Python汇编的首选扩展名为.pyasm
汇编设计用于与pydisasm –asm的输出一起使用
汇编文件标签位于行首并以冒号结尾,例如END_IF
汇编文件中的指令偏移被忽略且无需输入
在这些引用偏移的指令中,如果操作数是整数,则将使用该确切值作为操作数。否则,我们将查找标签并与之匹配
安装
标准Python例程
pip install -e . pip install -r requirements-dev.txt
还提供了一个GNU makefile,因此可以使用make install
(可能需要root或sudo权限)执行上述步骤。
测试
make check
已添加GNU makefile,以便更顺畅地设置运行正确命令,并从最快到最慢运行测试。
如果您已安装remake,您可以通过remake --tasks
查看包括测试在内的所有任务列表。
示例汇编文件
对于以下Python源代码
def five(): return 5 print(five())
以下是相应的汇编代码
# Python bytecode 3.6 (3379) # Method Name: five # Filename: /tmp/five.pl # Argument count: 0 # Kw-only arguments: 0 # Number of locals: 0 # Stack size: 1 # Flags: 0x00000043 (NOFREE | NEWLOCALS | OPTIMIZED) # First Line: 1 # Constants: # 0: None # 1: 5 2: LOAD_CONST (5) RETURN_VALUE # Method Name: <module> # Filename: /tmp/five.pl # Argument count: 0 # Kw-only arguments: 0 # Number of locals: 0 # Stack size: 2 # Flags: 0x00000040 (NOFREE) # First Line: 1 # Constants: # 0: <code object five at 0x0000> # 1: 'five' # 2: None # Names: # 0: five # 1: print 1: LOAD_CONST 0 (<code object five at 0x0000>) LOAD_CONST ('five') MAKE_FUNCTION 0 STORE_NAME (five) 3: LOAD_NAME (print) LOAD_NAME (five) CALL_FUNCTION 0 CALL_FUNCTION 1 POP_TOP LOAD_CONST (None) RETURN_VALUE
上述内容可以使用来自
pydisasm --format xasm /tmp/five.pyc
然而,在上面的例子中,我对结果进行了简化和缩短。
用法
要从汇编文件创建Python字节码文件,请运行
pyc-xasm [OPTIONS] ASM_PATH
要获取用法帮助,请输入pyc-xasm –help。
要将Python字节码从一种字节码转换为另一种,请运行
pyc-convert [OPTIONS] INPUT_PYC [OUTPUT_PYC]
要获取用法帮助,请输入pyc-convert –help。
另请参阅
https://github.com/rocky/python-xdis:跨Python版本反汇编
https://github.com/rocky/x-python:跨Python版本解释器
https://github.com/rocky/python-xasm/blob/master/HOW-TO-USE.rst:如何编写汇编文件
https://rocky.github.io/pycon2018-light.co/:Pycolumbia 2018 火花演讲,展示如何使用汇编器
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
xasm-1.2.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 800ed4d0e2b582fa85c39362ea2958020b8fe48e96d13c2f0895c7f7b1f5f81f |
|
MD5 | 1933d75b4581f2a87a48f22a585030a4 |
|
BLAKE2b-256 | ce0e71b42ebe7420df8237f43576c5034740f12b62a86a79e6a10df6bd71def6 |
xasm-1.2.0-py310-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4427492288440ce2fb1216745f394fe900b066d20002df2fe495a8d377ec58ba |
|
MD5 | ddbbc5f1631cee5be6e048b21d1fe7fc |
|
BLAKE2b-256 | d2d1b528292f3da76f7e8da7649dbc00b7d367da58303095163afc145e177430 |
xasm-1.2.0-py36-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cdd8d3419a331404dc8a242c116b4ec74234882c8dd33ff557e6537b5e980d54 |
|
MD5 | 922cbe6ed237c55788df70f16d14fe6f |
|
BLAKE2b-256 | 03381aca68e18e62f2e6eb2204e923be94a136a666c6760b0fb322b1d906d344 |
xasm-1.2.0-py3.10.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c45a189a2558140982d374348f62926ea04c3cbcabd42389af1edf6616cd6c8c |
|
MD5 | 248885edff1ed55fa13d48783abcb177 |
|
BLAKE2b-256 | c6dfd7ecf3140c6fdee1bedf37c052fdb1597f8f297c6be74582c31be92b8c11 |
xasm-1.2.0-py3.9.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c8140310875a4be4f8ad18b7df5b97748413f95b9c11ef045f681ad8ff22aeed |
|
MD5 | 692997a44f1092649072acc89c1664f7 |
|
BLAKE2b-256 | e0fa0f82f1824452d7aa2ce3a28cadf9c402a87a27103e8f0013bfdc56da9fc2 |
xasm-1.2.0-py3.8.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b7ad30570c2e50d6902c4cdd20cfd369543a21284bf6482b99ac136d2b1f01cf |
|
MD5 | 859cea76929fd4ad86b8cfe83da2a56f |
|
BLAKE2b-256 | b4c21871a479e55392b7d1a742ab24767759b517f038d795b09086e39e49f23b |
xasm-1.2.0-py3.7.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 509c74d02e883c235a323517beee300d888107651213d4d113f8ff7f0c016d31 |
|
MD5 | 033fc7a2dd0a6c03b8ca5d124628d21b |
|
BLAKE2b-256 | 4147a09c5bbcf8b8094e00f0a9cf825b63ac3af47b851d111fe5704d98e73bc6 |
xasm-1.2.0-py3.6.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b920a063b95c19264a3c021e7e4e906fa54bc68ba4fe9716ade4fed6f4640e7 |
|
MD5 | a02b64fe585c22d28779b749999821ac |
|
BLAKE2b-256 | f3e33a463ce58e4e6fccbe63f78fb1ccff986ada80268c4711845688787f7142 |