跳转到主要内容

Python跨版本字节码汇编器

项目描述

Pypi Installs Latest Version Supported Python Versions

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

上述内容可以使用来自的< cite>pydisasm命令自动从Python源代码创建

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

另请参阅

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

xasm-1.2.0.tar.gz (39.9 kB 查看哈希值

上传时间 源代码

构建分布

xasm-1.2.0-py310-none-any.whl (20.1 kB 查看哈希值

上传时间 Python 3.10

xasm-1.2.0-py36-none-any.whl (20.1 kB 查看哈希值

上传时间 Python 3.6

xasm-1.2.0-py3.10.egg (25.9 kB 查看哈希值

上传时间 源代码

xasm-1.2.0-py3.9.egg (25.7 kB 查看哈希值

上传时间 源代码

xasm-1.2.0-py3.8.egg (25.9 kB 查看哈希值

上传时间 源代码

xasm-1.2.0-py3.7.egg (25.8 kB 查看哈希值

上传时间 源代码

xasm-1.2.0-py3.6.egg (25.8 kB 查看哈希值)

上传时间 源代码

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面