一图看懂 dis 模块:将 python 字节码反汇编为助记符,资料整理+笔记(大全)

news2025/1/11 15:00:12

本文由 大侠(AhcaoZhu)原创,转载请声明。
链接: https://blog.csdn.net/Ahcao2008

Alt

一图看懂 dis 模块:将 python 字节码反汇编为助记符,资料整理+笔记(大全)

  • 🧊摘要
  • 🧊模块图
  • 🧊类关系图
  • 🧊模块全展开
    • ☘️【dis】
    • 🔵统计
    • 🔵常量
      • 🌿int
      • 🌿tuple
      • 🌿list
      • 🌿dict
    • 🔵模块
      • 🌿19 sys
      • 🌿20 types
      • 🌿21 collections
      • 🌿22 io
    • 🔵函数
      • 🌿23 _try_compile(source, name)
      • 🌿24 dis(x=None, *, file=None, depth=None)
      • 🌿25 distb(tb=None, *, file=None)
      • 🌿26 pretty_flags(flags)
      • 🌿27 _get_code_object(x)
      • 🌿28 code_info(x)
      • 🌿29 _format_code_info(co)
      • 🌿30 show_code(co, *, file=None)
      • 🌿31 get_instructions(x, *, first_line=None)
      • 🌿32 _get_const_info(const_index, const_list)
      • 🌿33 _get_name_info(name_index, name_list)
      • 🌿34 _get_instructions_bytes(code, varnames=None, names=None, constants=None, cells=None, linestarts=None, line_offset=0)
      • 🌿35 disassemble(co, lasti=-1, *, file=None)
      • 🌿36 _disassemble_recursive(co, *, file=None, depth=None)
      • 🌿37 _disassemble_bytes(code, lasti=-1, varnames=None, names=None, constants=None, cells=None, linestarts=None, *, file=None, line_offset=0)
      • 🌿38 _disassemble_str(source, **kwargs)
      • 🌿39 disassemble(co, lasti=-1, *, file=None)
      • 🌿40 _unpack_opargs(code)
      • 🌿41 findlabels(code)
      • 🌿42 findlinestarts(code)
      • 🌿43 _test()
    • 🔵类
      • 🌿44 dis._Instruction
        • property
      • 🌿45 dis.Instruction
      • 🌿46 dis.Bytecode
        • method
        • 1 dis(self)
        • 2 info(self)
        • class method
        • 3 from_traceback(cls, tb)
    • 🔵内嵌函数或方法
    • 🔵私有或局部
    • ☘️【sys】
    • ☘️【types】
    • ☘️【collections】
    • ☘️【io】

🧊摘要

  • 全文介绍python的 dis 模块(将 python 字节码反汇编为助记符)、函数、类及类的方法和属性。
  • 它通过代码抓取并经AI智能翻译和人工校对。
  • 是一部不可多得的权威字典类工具书。它是系列集的一部分。后续陆续发布、敬请关注。【原创:AhcaoZhu大侠】

🧊模块图

dis-module

dis
	◆sys
	◆types
	◆collections
	◆io

🧊类关系图

dis-class

◆object
	◆collections.deque
	dis.Bytecode
	◆frame
	◆mappingproxy
	◆member_descriptor
	◆operator.itemgetter
	◆tuple
		dis._Instruction
			dis.Instruction

🧊模块全展开

☘️【dis】

dis, fullname=dis, file=dis.py

将Python字节码反汇编为助记符。

🔵统计

序号类别数量
1int5
4str5
5tuple2
6list10
8dict3
9module4
10class3
11function21
12builtin_function_or_method1
13residual2
14system9
15private15
16all56

🔵常量

🌿int

1 HAVE_ARGUMENT 90
2 EXTENDED_ARG 144
3 FORMAT_VALUE 155
4 _OPNAME_WIDTH 20
5 _OPARG_WIDTH 5

🌿tuple

6 cmp_op (‘<’, ‘<=’, ‘==’, ‘!=’, ‘>’, ‘>=’, ‘in’, ‘not in’, ‘is’, ‘is not’, ‘exception match’, ‘BAD’)
7 _have_code (<class ‘method’>, <class ‘function’>, <class ‘code’>, <class ‘classmethod’>, <class ‘staticmethod’>, <class ‘type’>)

🌿list

8 hasconst [100]
9 hasname [90, 91, 95, 96, 97, 98, 101, 106, 108, 109, 116, 160]
10 hasjrel [93, 110, 120, 121, 122, 143, 154]
11 hasjabs [111, 112, 113, 114, 115, 119]
12 haslocal [124, 125, 126]
13 hascompare [107]
14 hasfree [135, 136, 137, 138, 148]
15 opname [‘<0>’, ‘POP_TOP’, ‘ROT_TWO’, ‘ROT_THREE’, ‘DUP_TOP’, ‘DUP_TOP_TWO’, ‘<6>’, ‘<7>’, ‘<8>’, ‘NOP’, ‘UNARY_POSITIVE’, 'UNAR…
16 hasnargs []

🌿dict

17 opmap {‘POP_TOP’: 1, ‘ROT_TWO’: 2, ‘ROT_THREE’: 3, ‘DUP_TOP’: 4, ‘DUP_TOP_TWO’: 5, ‘NOP’: 9, ‘UNARY_POSITIVE’: 10, 'UNARY_NEGA…
18 COMPILER_FLAG_NAMES {1: ‘OPTIMIZED’, 2: ‘NEWLOCALS’, 4: ‘VARARGS’, 8: ‘VARKEYWORDS’, 16: ‘NESTED’, 32: ‘GENERATOR’, 64: ‘NOFREE’, 128: 'CORO…

🔵模块

🌿19 sys

sys, fullname=sys, file=

🌿20 types

types, fullname=types, file=types.py

🌿21 collections

collections, fullname=collections, file=collections_init_.py

🌿22 io

io, fullname=io, file=io.py

🔵函数

🌿23 _try_compile(source, name)

_try_compile(source, name), module=dis, line:21 at dis.py

尝试编译给定的源代码,首先作为表达式编译,如果第一种方法失败,然后作为语句编译。
实用程序函数接受函数中的字符串,否则会期望代码对象

🌿24 dis(x=None, *, file=None, depth=None)

dis(x=None, *, file=None, depth=None), module=dis, line:34 at dis.py

反汇编类、方法、函数和其他编译过的对象。
在没有参数的情况下,反汇编最后一个回溯。
编译对象目前包括生成器对象、异步生成器对象和协程对象,所有这些对象都将其代码对象存储在一个特殊属性中。

🌿25 distb(tb=None, *, file=None)

distb(tb=None, *, file=None), module=dis, line:79 at dis.py

反汇编回溯(默认:最后一次回溯)。

🌿26 pretty_flags(flags)

pretty_flags(flags), module=dis, line:105 at dis.py

返回代码标志的漂亮表示。

🌿27 _get_code_object(x)

_get_code_object(x), module=dis, line:119 at dis.py

帮助处理方法、编译或原始代码对象和字符串。

🌿28 code_info(x)

code_info(x), module=dis, line:142 at dis.py

方法、函数或代码的格式化细节。

🌿29 _format_code_info(co)

_format_code_info(co), module=dis, line:146 at dis.py

🌿30 show_code(co, *, file=None)

show_code(co, *, file=None), module=dis, line:177 at dis.py

打印方法、函数或代码的详细信息到 *file*。如果没有提供 *file*,则输出在 stdout 上打印。

🌿31 get_instructions(x, *, first_line=None)

get_instructions(x, *, first_line=None), module=dis, line:251 at dis.py

方法、函数或代码中操作码的迭代器生成一系列指令命名元组,给出所提供代码中每个操作的详细信息。
如果 *first_line* 不是None,它表示反汇编代码中应该报告的第一个源行的行号。
否则,源行信息(如果有的话)将直接从反汇编代码对象中获取。

🌿32 _get_const_info(const_index, const_list)

_get_const_info(const_index, const_list), module=dis, line:273 at dis.py

如果定义了常量列表,则返回解引用常量及其报告。
否则返回常量索引及其repr()。

🌿33 _get_name_info(name_index, name_list)

_get_name_info(name_index, name_list), module=dis, line:285 at dis.py

如果定义了名称列表,则返回解引用的名称作为value和repr。
否则返回名称索引及其repr()。

🌿34 _get_instructions_bytes(code, varnames=None, names=None, constants=None, cells=None, linestarts=None, line_offset=0)

_get_instructions_bytes(code, varnames=None, names=None, constants=None, cells=None, linestarts=None, line_offset=0), module=dis, line:301 at dis.py

迭代字节码字符串中的指令。
生成指令命名元组序列,给出每个操作码的详细信息。
关于代码运行时环境的附加信息(例如变量名、常量)可以使用可选参数指定。

🌿35 disassemble(co, lasti=-1, *, file=None)

disassemble(co, lasti=-1, *, file=None), module=dis, line:352 at dis.py

反汇编代码对象。

🌿36 _disassemble_recursive(co, *, file=None, depth=None)

_disassemble_recursive(co, *, file=None, depth=None), module=dis, line:359 at dis.py

🌿37 _disassemble_bytes(code, lasti=-1, varnames=None, names=None, constants=None, cells=None, linestarts=None, *, file=None, line_offset=0)

_disassemble_bytes(code, lasti=-1, varnames=None, names=None, constants=None, cells=None, linestarts=None, *, file=None, line_offset=0), module=dis, line:370 at dis.py

🌿38 _disassemble_str(source, **kwargs)

_disassemble_str(source, **kwargs), module=dis, line:400 at dis.py

编译源字符串,然后反汇编代码对象。

🌿39 disassemble(co, lasti=-1, *, file=None)

disassemble(co, lasti=-1, *, file=None), module=dis, line:352 at dis.py

反汇编代码对象。

🌿40 _unpack_opargs(code)

_unpack_opargs(code), module=dis, line:406 at dis.py

🌿41 findlabels(code)

findlabels(code), module=dis, line:417 at dis.py

检测字节码中作为跳转目标的所有偏移量。
返回偏移量列表。

🌿42 findlinestarts(code)

findlinestarts(code), module=dis, line:436 at dis.py

查找字节码中的偏移量,这些偏移量是源代码中的行开始。
生成对(offset, lineno),如 Python/compile.c 中所述。

🌿43 _test()

_test(), module=dis, line:522 at dis.py

简单的测试程序反汇编文件。

🔵类

🌿44 dis._Instruction

_Instruction, dis._Instruction, module=dis, line:-1 at dis.py

    _Instruction(opname, opcode, arg, argval, argrepr, offset, starts_line, is_jump_target)

property

1 arg=<property object at 0x000002B5F57FAB38> kind:property type:property class:<class ‘dis._Instruction’>
2 argrepr=<property object at 0x000002B5F57FABD8> kind:property type:property class:<class ‘dis._Instruction’>
3 argval=<property object at 0x000002B5F57FAB88> kind:property type:property class:<class ‘dis._Instruction’>
4 is_jump_target=<property object at 0x000002B5F57FACC8> kind:property type:property class:<class ‘dis._Instruction’>
5 offset=<property object at 0x000002B5F57FAC28> kind:property type:property class:<class ‘dis._Instruction’>
6 opcode=<property object at 0x000002B5F57FAAE8> kind:property type:property class:<class ‘dis._Instruction’>
7 opname=<property object at 0x000002B5F57FAA98> kind:property type:property class:<class ‘dis._Instruction’>
8 starts_line=<property object at 0x000002B5F57FAC78> kind:property type:property class:<class ‘dis._Instruction’>

🌿45 dis.Instruction

Instruction, dis.Instruction, module=dis, line:199 at dis.py

字节码操作的详细信息
    opname          -操作的人类可读名称
    opcode          -操作的数字代码
    arg             -操作的数字参数(如果有),否则为None
    argval          -解析的参数值(如果已知),否则与arg相同
    argrepr         -操作参数的人类可读描述
    offset          -字节码序列中操作的起始索引
    starts_line     -由该操作码开始的行(如果有),否则为None
    is_jump_target  -如果其他代码跳转到这里,否则为False

🌿46 dis.Bytecode

Bytecode, dis.Bytecode, module=dis, line:461 at dis.py

用函数、方法、其他编译对象、代码字符串或代码对象(由compile()返回)实例化它。
对其进行迭代将产生字节码操作作为指令实例。

method

1 dis(self)

kind=method class=Bytecode objtype=function line:504 at …\lib\dis.py

返回字节码操作的格式化视图。

2 info(self)

kind=method class=Bytecode objtype=function line:500 at …\lib\dis.py

返回关于代码对象的格式化信息。

class method

3 from_traceback(cls, tb)

kind=class method class=Bytecode objtype=classmethod line:494 at …\lib\dis.py

将函数转换为类方法。

🔵内嵌函数或方法

47 stack_effect

🔵私有或局部

48 _have_code (<class ‘method’>, <class ‘function’>, <class ‘code’>, <class ‘classmethod’>, <class ‘staticmethod’>, <class ‘type’>)
49 _try_compile <function _try_compile at 0x000002B5F348B288>
50 _get_code_object <function _get_code_object at 0x000002B5F57F2D38>
51 _format_code_info <function _format_code_info at 0x000002B5F57F8048>
52 _Instruction <class ‘dis._Instruction’>
53 _OPNAME_WIDTH 20
54 _OPARG_WIDTH 5
55 _get_const_info <function _get_const_info at 0x000002B5F57F8798>
56 _get_name_info <function _get_name_info at 0x000002B5F57F8828>
57 _get_instructions_bytes <function _get_instructions_bytes at 0x000002B5F57F88B8>
58 _disassemble_recursive <function _disassemble_recursive at 0x000002B5F57F89D8>
59 _disassemble_bytes <function _disassemble_bytes at 0x000002B5F57F8A68>
60 _disassemble_str <function _disassemble_str at 0x000002B5F57F8AF8>
61 _unpack_opargs <function _unpack_opargs at 0x000002B5F57F8B88>
62 _test <function _test at 0x000002B5F57F8D38>

☘️【sys】

sys, fullname=sys

☘️【types】

types, fullname=types, file=types.py

☘️【collections】

collections, fullname=collections, file=collections_init_.py

☘️【io】

io, fullname=io, file=io.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-python_plt_散点图

Python plt散点图&#xff1a;学习数据可视化的有力武器 Python是一种广泛使用的编程语言&#xff0c;广泛应用于数据科学&#xff0c;数据分析&#xff0c;计算机视觉等领域。而在数据可视化方面&#xff0c;Python也提供了很多强大的工具&#xff0c;其中plt散点图是一种非常…

Chatbot UI老外在用的gpt网页版 搭建方法分享!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Chatbot UI 高仿ChatGPT官网&#xff0c;中文还支持贼好&#xff0c;界面美观度间距还需要打磨。是老外做的吗&#xff1f; ​ 环境部署 更新环境 apt update -y && apt upg…

09 - 进程长参数编程

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 短选项扩展编程1.1 再论进程参数&#xff08;短选项&#xff09;1.2 进程短选项示例 2. 进程长参数编程2.1 进程长参数示例2.2 进程长参…

MATLAB NAN或INF无效点去除 (14)

MATLAB NAN或INF无效点去除 (14) 一、算法介绍二、算法实现1.代码(含注释说明)2.效果(无效点去除前后点坐标展示)一、算法介绍 仅就一般情况来说,激光点云受到测量影响,可能会产生无效点,即坐标值为NAN或者INF等,这种点会严重干扰一些几何特征,例如法向等的计算,因…

HummerRisk V1.1.0 发布

HummerRisk V1.1.0发布&#xff1a; 重构了新的Dashboard&#xff0c;新增报告中心&#xff0c;增加新的 Linux 主机系统的安全扫描、安全审计功能。增加部分Docker相关的主机检测&#xff0c;镜像仓库新增公有云阿里云、腾讯云类型&#xff0c;新增镜像分组管理等功能&#x…

chatgpt赋能Python-python_os拷贝文件

Python os拷贝文件 – 从简介到实现 Python os库是一个经常使用的工具&#xff0c;它是Python的标准库&#xff0c;提供了与操作系统进行交互的函数和方法。其中&#xff0c;os拷贝文件是其常用的功能之一&#xff0c;可以用来实现文件备份、文件复制等等操作。接下来&#xf…

pthread多线程: 线程泄漏的检测

文章目录 1. 目的2. 什么是线程泄漏3. pthread 线程泄漏例子3.1 代码3.2 编译和运行3.3 简要分析 4. 检测线程泄漏4.1 编译链接时传入参数 -fsanitizethread4.2 确认 TSAN_OPTIONS 环境变量 5. 修复线程泄漏5.1 方法1&#xff1a; 主线程等待子线程5.2 方法2&#xff1a;子线程…

k8s网络如何连接?

在k8s中网络连接可以分为 容器与容器: 所有在pod中的容器表现为在同一个host&#xff0c;他们之间可以通过端口进行连接 pod与pod: 因为每个pod都有一个ip&#xff0c;因此pod可以通过ip进行直接连接 在不同主机上pod究竟是如何连接的呢&#xff1f;毕竟pod ip只是虚拟的&…

Vue+Element-ui实现表格导出和导入

表格导出&#xff0c;填写数据&#xff0c;导入表格 需求&#xff1a;表格导出&#xff0c;填写数据&#xff0c;导入数据表格文件存储在前端表格文件不存储 需求&#xff1a;表格导出&#xff0c;填写数据&#xff0c;导入数据 分析需求&#xff1a; &#xff08;1&#xff0…

【Leetcode60天带刷】day01——704.二分查找、27.移除元素

题目&#xff1a; 704. 二分查找 Leetcode原题链接&#xff1a;力扣704.二分查找 思考历程与知识点&#xff1a; 考查二分查找能力&#xff0c;注意mid的取值。 注意&#xff1a; 右端点的大小&#xff0c;需要在数组长度上-1。也就是nums.size()-1&#xff0c;因为下标是从…

chatgpt赋能Python-python_numpy_转置

Python Numpy 转置 - 高效处理数据的必备技巧 作为一名专注于Python编程的工程师&#xff0c;你可能已经知道了 Python 编程语言的优雅以及Numpy 库的高效操作。在进行数值计算和数据处理方面&#xff0c;Numpy 库已成为 Python 可以与其他编程语言匹敌的主要原因之一。其中一…

Vue 3 第二十二章:组件十(组件高级特性-组件的渲染函数和JSX/TSX语法)

文章目录 1. 渲染函数2. JSX / TSX 语法2.1. 基本使用2.2. 使用 vue 中的语法2.2.1. {} 语法2.2.2. v-model 使用2.2.3. v-show 使用2.2.4. v-if 不支持&#xff0c;实现v-if功能2.2.5. v-for 不支持&#xff0c;实现 v-for 功能2.2.6. v-bind 不支持&#xff0c;模拟 v-bind2.…

AWD竞赛全流程解析

AWD(Attack With Defense&#xff0c;攻防兼备)是一个非常有意思的模式&#xff0c;你需要在一场比赛里要扮演攻击方和防守方&#xff0c;攻者得分&#xff0c;失守者会被扣分。也就是说&#xff0c;攻击别人的靶机可以获取 Flag 分数时&#xff0c;别人会被扣分&#xff0c;同…

汇编十三、串口

1、通信相关概念 (1)单工&#xff1a;只能接收或只能发送数据。 (2)半双工&#xff1a;既能发送数据&#xff0c;也能接收数据&#xff0c;但不能同时进行。 (3)全双工&#xff1a;可以同时进行发送和接收数据。 (4)单片机中常用的通信物理接口&#xff1a;I2C、SPI、USB、…

tushare单个股票过去五年的数据整理与预测

文章目录 前言&#xff1a;1. 导入相关包2. 数据预处理3. 构建模型3. 模型训练4. 检查数据6. 工作中其他常用包记录 前言&#xff1a; %md 在量化投资中&#xff0c;计算收益率是更常见的做法&#xff0c;而不是仅计算股价。计算收益率可以更好地反映投资的回报情况&#xff0c…

Pinctrl子系统_01_Pinctrl子系统介绍

本节介绍在Pinctrl子系统中&#xff0c;将会学习哪些内容。 Pinctrl作用 Pinctrl&#xff1a;Pin Controller&#xff0c;顾名思义&#xff0c;就是用来控制引脚的。 一个芯片有成百上千个引脚&#xff0c;这些引用要怎么配置&#xff0c;配置成什么功能&#xff0c;都是通P…

python+django网上书籍商城小说在线阅读分享下载系统k19is-vue

为了解决用户便捷地在网上购物以及下载文件&#xff0c;本文设计和开发了一个网页小说阅读系统。本系统是基于 B/S架构设计&#xff0c;Dango框架 &#xff0c;Python技术的前台页面设计与实现&#xff0c;使用Mysql数据库管理来完成系统的相关功能。主要实现了管理员与用户的注…

ETSI TS-关于SCP80

描述 GPC_UICC Configuration_v2.0.pdf 中: 规范 ts_102.225v12.1.0 Secured packet structure for UICC based applications.pdf spi kic kid编码 7 TCP/IP 的实现 在发送安全数据包之前&#xff0c;发送实体应使用定义的推送机制打开 TCP/IP 连接 在 ETSI TS 102 226 [9] …

【MATLAB第34期】基于MATLAB的2023年棕熊优化算法BOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富

【MATLAB第34期】基于MATLAB的2023年棕熊优化算法BOA优化LSTM时间序列预测模型 优势明显&#xff0c;注释详细&#xff0c;绘图丰富&#xff0c;适合小白 一、代码优势 1.使用2023年棕熊算法BOA优化LSTM超参数&#xff08;学习率&#xff0c;隐藏层节点&#xff0c;正则化系数…

chatgpt赋能Python-python_numpy倒序

Python Numpy倒序&#xff1a;简介、使用和优势 简介 Python是一门功能强大的编程语言&#xff0c;提供了众多开源库&#xff0c;其中Numpy是其中最流行的之一。Numpy是Python中的一个数值计算库&#xff0c;提供了一个高效的数组对象和相应的数学函数。它是数据科学家和机器…