我有一个Python字节码文件,但没有原始的.py文件。我尝试运行它。但是,它会引发错误[1] 5811 segmentation fault python flag5.pyc
。我知道,如果我删除下面的所有EXTENDED_ARG
,将显示如下列表:a = [1,12,9,217,376,...,1,12]
但是,字节码中有很多EXTENDED_ARG
,它们位于LOAD_CONST
指令的中间。因此,(1)它可以是什么python代码?(2)如何计算BUILD_LIST
大小以避免分割错误?
LOAD_CONST (1)
LOAD_CONST (12)
EXTENDED_ARG 1 (256)
LOAD_CONST (9)
LOAD_CONST (217)
LOAD_CONST (376)
EXTENDED_ARG 1 (256)
...
LOAD_CONST (1)
LOAD_CONST (12)
EXTENDED_ARG 9 (2304)
EXTENDED_ARG 2467 (631552)
BUILD_LIST 631690
我正在使用Python3.8.0。
根据https://docs.python.org/3/library/dis.html#opcode-EXTENDED_ARG:
EXTENDED_ARG(ext)
为所有参数太大而无法容纳默认的一个字节的操作码加上前缀。
ext
保留一个额外的字节,它们充当参数中的高位。对于每个操作码,最多允许三个前缀EXTENDED_ARG
,形成从两个字节到四个字节的参数。