python - 如何在 dis.dis 之后获取 LOAD_CLASSDEREF 指令?

标签 python disassembly

我应该编写什么函数/类来获取 LOAD_CLASSDEREF 作为字节码指令?

我已经能够找到产生 LOAD_BUILD_CLASS、LOAD_CONST、LOAD_GLOBAL、LOAD_FAST、LOAD_ATTR、LOAD_DEREF、LOAD_NAME、字节码的函数/类,但是什么函数/类会产生 LOAD_CLOSURE 和 LOAD_CLASSDEREF?

最佳答案

LOAD_CLASSDEREF 用于类体访问闭包变量时,因此让类体访问闭包变量:

def foo():
    x = 3
    class Bar:
        print(x)

Bar 的代码对象将使用 LOAD_CLASSDEREF。根据您的 Python 版本,您可能需要从 foo.__code__.co_consts 中提取代码对象,并直接对该代码对象调用 dis.dis 才能查看其中的操作码dis.dis 输出。

您还可以在 foo 的字节码中看到 LOAD_CLOSURE

关于python - 如何在 dis.dis 之后获取 LOAD_CLASSDEREF 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57533081/

相关文章:

python - 使用 PostMan 时谷歌云签名 url "SignatureDoesNotMatch"但在 Python 中工作正常

Python模块无法加载共享库,原因: image not found

如果执行得太快,Python 线程会干扰

python - 如何从 Python 编写 Visual Studio 2008 脚本?

assembly - 一个操作码字节如何根据 "register/opcode"字段解码为不同的指令?那是什么?

disassembly - 基本 C 程序的堆栈操作

python - pip 无法安装任何东西,错误 : invalid command 'egg_info'

c - 将十六进制解析为 LC3 ADD 指令

python - 使用反汇编器调试Python错误

assembly - 读取 AND ISA 代码时遇到问题