最新下载
热门教程
- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 
深入分析python中dis反编译的输出结构
时间:2022-11-14 23:00:33 编辑:袖梨 来源:一聚教程网
关于dis:
doc:http://docs.*pyth**on.org/2/library/dis.html
关于.pyc
.pyc文件是.py文件经过编译后的二进制文件,是一种跨平台,由虚拟机执行的字节码(byte code)。
不通版本的python编译后.pyc的内容是不同的。
doc:http://docs.*p*y*thon.org/2/tutorial/modules.html#compiled-python-files
示例代码:
| 代码如下 | 复制代码 | 
| 
 dis_list_slice.py a = [1, 2, 3]  | 
	  |
运行:
| 代码如下 | 复制代码 | 
| 
 python -m dis dis_list_slice.py 输出: 1 0 LOAD_CONST 0 (1)  | 
	  |
编译:
我们来看看a = [1,2,3] 的真实 byte code
| 代码如下 | 复制代码 | 
| 
 >>> co = compile(‘a=[1,2,3]‘, ‘ >>> co.co_code.encode(‘hex’) ‘6400006401006402006703005a00006500005a010064030053’ (一个十六进制串)  | 
	  |
解读:
第一行:
| 代码如下 | 复制代码 | 
| 1 0 LOAD_CONST 0 (1) | 
	  |
第一列1代表源代码第一行语句执行所编译的字节码,也就是执行a = [1, 2, 3]:
| 代码如下 | 复制代码 | 
|   0 LOAD_CONST 0 (1) 3 LOAD_CONST 1 (2) 6 LOAD_CONST 2 (3) 9 BUILD_LIST 3 12 STORE_NAME 0 (a)  | 
	  |
左边的第一个0代表指令的偏移量(offset),从byte code里边读取 offset = 0 到前两位是64
操作码(opcode)为LOAD_CONST
这里的64 和 LOAD_CONST 是一一对应的,
| 代码如下 | 复制代码 | 
| 
 >>> import opcode >>> opcode.opname[0x64] ‘LOAD_CONST’  | 
	  |
从这里想到了什么?
没错我们可以通过修改opcode来加密代码.
操作指令集合:
http://docs.*pyth**on.org/2/library/dis.html#python-bytecode-instructions
LOAD_CONST 右边的这个0代表oparg,从byte code 里读取就是:0000
接下来从offset = 3的地方读取两位即:64,opcode为LOAD_CONST,oparg为0100,即为:1
继续,从offset = 4的地方读取两位即:64,opcode为LOAD_CONST,oparg为0200,即为:2
这里的oparg是小端序(little-endian)。
关于大端序以及小端序:
http://zh.wi*k*ipe*dia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F
注意:oparg的含义取决于opcode
例如:对于LOAD_NAME以及LOAD_ATTR来说,oparg代表co_names中的下标。
引用dis.dis 输出源代码第二行的byte code
| 代码如下 | 复制代码 | 
| 
 2 15 LOAD_NAME 0 (a) >>> co.co_names (‘a’, ‘b’) >>> co.co_code.encode(‘hex’) ’6400006401006402006703005a00006500005a010064030053′ >>> opcode.opname[0x65] ‘LOAD_NAME’  | 
	  |
oparg 为0000,即为0,代表在co_names中下标为0的数据,即为a.
====================================================
如有不对的地方,请指出。
相关文章
- 二重螺旋金色魔灵怎么获得 金色魔灵获取攻略 11-04
 - 二重螺旋装备图纸怎么获得 装备图纸获取攻略 11-04
 - 2025年庆祝六一儿童节句子六一儿童节朋友圈文案(精选97句) 11-04
 - 二重螺旋输出角色怎么选 输出角色选择推荐 11-04
 - 二重螺旋妮弗尔夫人魔之楔怎么配-妮弗尔夫人魔之楔搭配推荐 11-04
 - 二重螺旋千面歌者的忧郁任务怎么做 千面歌者的忧郁任务流程攻略 11-04