位置: 编程技术 - 正文

Python使用dis模块把Python反编译为字节码的用法详解

编辑:rootadmin

推荐整理分享Python使用dis模块把Python反编译为字节码的用法详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

dis — Disassembler for Python bytecode,即把python代码反汇编为字节码指令.使用超级简单:

Python 代码是先被编译为字节码后,再由Python虚拟机来执行字节码, Python的字节码是一种类似汇编指令的中间语言, 一个Python语句会对应若干字节码指令,虚拟机一条一条执行字节码指令, 从而完成程序执行。Python dis 模块支持对Python代码进行反汇编, 生成字节码指令。当我在网上看到while 1比while True快的时候,我感到很困惑,为何会有这种区别呢&#;于是使用dis来深入.假设est_while.py代码如下.

下面是使用dis来进行剖析.

可以看到,在while 1这里(第3行),直接是JUMP_ABSOLUTE指令;而while True这里(第5行),由LOAD_NAME和POP_JUMP_IF_FALSE指令组成.原来True在python2中不是一个关键字,只是一个内置的变量,bool类型,值为1,即True+True输出2.而且还可以被赋值.比如赋值True = 2, 甚至可以赋值True = False.所以while True的时候, 每次循环都要检查True的值, 对应指令LOAD_NAME.这就是为什么while True比while 1慢了.不过在python3中,True变成了关键字了.while 1和while True的指令相同,所以没有性能区别了.

Python使用dis模块把Python反编译为字节码的用法详解

再来看个小例子,先来一小段代码:

代码执行后会输出:

以第一条指令为例, 第一列的数字(2)表示对应源代码的行数。第二列的数字是字节码的索引,指令LOAD_CONST在0位置。第三列是指令本身对应的人类可读的名字。第四列表示指令的参数。第5列则是计算后的实际参数。其中的“>>" 表示跳转的目标, 第4列的“” 表明了跳转到索引为的指令。Python代码在编译过程中会生成CodeObject, CodeObject是在虚拟机中的抽象表示, 在Python C源码中表示为PyCodeObject, 而生成的.pyc 文件则是字节码在磁盘中的表现形式。以Python代码为讲,test.__code__.co_code 表示test函数的字节码指令序列。将此序列打印出来,

输出:

对照dis输出的字节码指令, 以[,1,0]序列为例。表示在Python字节码定义中的索引,在python代码中, 可以通过dis.opname[]查看,即为LOAD_CONST。而后的两个字节表示指令的参数。而dis输出的字节码指令中,第二列的字节码索引则是指当前指令在co_code序列中所在的位置。dis输出的字节码指令中,部分指令是没有参数, 在co_code 中也同样可以看到,(RETURN_VALUE)直接接上下一条指令(LOAD_CONST)。

实例探究Python以并发方式编写高性能端口扫描器的方法 关于端口扫描器端口扫描工具(PortScanner)指用于探测服务器或主机开放端口情况的工具。常被计算机管理员用于确认安全策略,同时被攻击者用于识别

Python中死锁的形成示例及死锁情况的防止 死锁示例搞多线程的经常会遇到死锁的问题,学习操作系统的时候会讲到死锁相关的东西,我们用Python直观的演示一下。死锁的一个原因是互斥锁。假

浅谈python新手中常见的疑惑及解答 1lambda函数函数格式是lambdakeys:express匿名函数lambda是一个表达式函数,接受keys参数,返回表达式的值。所以不用return,也没有函数名,经常用在需要key参

标签: Python使用dis模块把Python反编译为字节码的用法详解

本文链接地址:https://www.jiuchutong.com/biancheng/387635.html 转载请保留说明!

上一篇:Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程(flask框架下使用scrapy框架)

下一篇:Python中死锁的形成示例及死锁情况的防止(代码实现死锁)

  • 增值税发票综合服务平台怎么下载
  • 国有独资企业是国企吗
  • 社保个人承担部分
  • 小规模纳税人附加税减免政策2023
  • 专利权的入账价值计算公式
  • 关联方交易金额太大有什么后果
  • 多发了工资怎么处理
  • 到国税局领增值税发票需带什么
  • 从银行提取现金用途
  • 建筑企业异地预交税款如何处理
  • 破产清算收到的实收资本是破产资产吗
  • 现金券违法吗
  • 建筑清包工的账务处理
  • 开专票红冲是不是双方都要开信息表
  • 公司土地被征收员工该怎么办
  • 上年度的会计分录做错了今年可以调整吗
  • 房地产公司开水电费发票
  • 为员工买的人寿保险怎么做账
  • 公司委托其他公司为员工代缴社保公积金
  • 税务局退税收入多久到账
  • 工商年报中的纳税总额是所属期应交还是实交税额
  • 广告费和业务宣传费15%还是30%
  • 提货卡的发票要盖章吗
  • 一般纳税人未达到起征点要交税吗
  • 企业所得税汇算清缴退税怎么做账务处理
  • 和别人合作投资后悔了怎么说
  • 土地作价入股土地如何过户
  • 应收账款账龄怎么查
  • 个人所得税代扣代缴的适用范围
  • 行政单位结转结余形成的原因
  • 缴纳上月增值税记账凭证怎么填写
  • 预缴的税款科目怎么做
  • 直系亲属股权转让免征个人所得税
  • mediacachefiles什么意思
  • 金鱼花的养殖方法与注意事项
  • 新会计准则计入管理费用的税费
  • 本地部署stable diffusion需要什么显卡
  • 什么是神经网络算法
  • 机器学习——图像分类
  • 大二一学期学分多少合适
  • pgadmin配置
  • 软件的摊销期限
  • dem如何生成
  • sar参数设置4个数
  • 织梦cms要钱吗
  • 什么情况下要开外经证
  • 企业用户怎么在电脑登录
  • mysql嵌套语句
  • 个体工商户购买生育险有生育津贴吗
  • 独立核算的分公司
  • 分公司挣的钱归谁所有
  • 预付款什么时候开发票
  • 帮人家开税票对自己生意有影响么
  • 企业贷款业务
  • 建筑企业收到材料发票没有备注工程地址可以用吗
  • 购买会计软件如何入账
  • 预提成本费用的会计分录
  • 购入固定资产的会计科目
  • 现金日记账是什么帐
  • mysql数据库高可用架构
  • WIN10开始菜单点击鼠标右键没反应的处理方法
  • mac系统操作的小技巧
  • linux切换到home文件夹
  • 系统维护的主要内容有哪些
  • linux去掉文件换行符
  • windows开机自启动程序
  • mac电脑登录
  • 命令行查看硬盘序列号
  • win10系统中断怎么解除
  • unity优化技术
  • webpack 构建流程
  • bootstrap模态框按钮无响应
  • config_system_switchs
  • Node.js中的核心模块包括哪些内容?
  • 安卓系统休眠设置在哪
  • python放歌
  • jquery有哪些
  • 建筑企业异地预缴增值税计算
  • 财务局是什么
  • 2020年安徽省护理技能大赛视频播放
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设