博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 反编译
阅读量:4294 次
发布时间:2019-05-27

本文共 1616 字,大约阅读时间需要 5 分钟。

1. 使用第三方库

uncompyle,这个库可以将代码反编译成字节码指令和源代码

简单的使用方法:

from uncompyle2 import *fp = open("code.txt","wb")uncompyle_file('test.pyc',fp,showasm=1,showast=0)fp.close()

当然,这只是其中一种方法,还有其他方法可以选择

2.使用python自带的dis模块

这是从stackoverflow上看到的:

>>> import dis>>> def inplace_add():...     a = 0...     a += 1... >>> def add_and_assign():...     a = 0...     a = a + 1... >>> dis.dis(inplace_add)  2           0 LOAD_CONST               1 (0)              3 STORE_FAST               0 (a)  3           6 LOAD_FAST                0 (a)              9 LOAD_CONST               2 (1)             12 INPLACE_ADD                      13 STORE_FAST               0 (a)             16 LOAD_CONST               0 (None)             19 RETURN_VALUE        >>> dis.dis(add_and_assign)  2           0 LOAD_CONST               1 (0)              3 STORE_FAST               0 (a)  3           6 LOAD_FAST                0 (a)              9 LOAD_CONST               2 (1)             12 BINARY_ADD                       13 STORE_FAST               0 (a)             16 LOAD_CONST               0 (None)             19 RETURN_VALUE

3.附加说明

实际上Python每个函数都是一个对象,这个对象上面就直接带了编译好的字节码,函数中的常量,函数的变量等等信息,还是挺有趣的,大家可以试一试

>>> def add(a, b):	return a + b>>> add.func_code.co_code'|\x00\x00|\x01\x00\x17S'>>> add.func_code.co_consts(None,)>>> add.func_code.co_varnames('a', 'b')>>> add.func_code.co_name'add'

然后具体的字节码的值Python也是自带了的,有一个包叫opcode,大家可以用idle去看看它的结构,我这里贴出一小部分

>>> import opcode>>> for i in range(len(opcode.opname)):	print(i, opcode.opname[i])	(0, 'STOP_CODE')(1, 'POP_TOP')(2, 'ROT_TWO')(3, 'ROT_THREE')(4, 'DUP_TOP')(5, 'ROT_FOUR')......(255, '<255>')

转载地址:http://ituws.baihongyu.com/

你可能感兴趣的文章
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Mac 下docker路径 /var/lib/docker不存在问题
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(二) 基础命令
查看>>
Docker(三) 构建镜像
查看>>
Spring 全家桶注解一览
查看>>
JDK1.8-Stream API使用
查看>>
cant connect to local MySQL server through socket /tmp/mysql.sock (2)
查看>>
vue中的状态管理 vuex store
查看>>
Maven之阿里云镜像仓库配置
查看>>
Maven:mirror和repository 区别
查看>>
微服务网关 Spring Cloud Gateway
查看>>
SpringCloud Feign的使用方式(一)
查看>>
SpringCloud Feign的使用方式(二)
查看>>
关于Vue-cli+ElementUI项目 打包时排除Vue和ElementUI
查看>>
Vue 路由懒加载根据根路由合并chunk块
查看>>
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>