Python Bytecide中的EXTENDED_ARG

问题描述 投票:0回答:1

我有一个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。

python python-3.x reverse-engineering bytecode
1个回答
0
投票

根据https://docs.python.org/3/library/dis.html#opcode-EXTENDED_ARG

EXTENDED_ARG(ext)

为所有参数太大而无法容纳默认的一个字节的操作码加上前缀。 ext保留一个额外的字节,它们充当参数中的高位。对于每个操作码,最多允许三个前缀EXTENDED_ARG,形成从两个字节到四个字节的参数。

© www.soinside.com 2019 - 2024. All rights reserved.