向pycdc项目提的一个pr

向pycdc项目提的一个pr

前言

pycdc这个项目,我之前一直有在关注,之前使用他反编译python3.10项目,之前使用的 uncompyle6无法反编译pyhton3.10生成的pyc文件,但是pycdc可以,但是反编译效果感觉不如uncompyle6。但是版本更新很快,支持的python版本很多。

在issue看到别人提供的pyc文件

我逛github的时候,看看这个项目有没有更新啥新特性,在issue里面看到别人提的issue,带了一个pyc文件。本着乐于助人的态度,也想学习一下这个项目是如何解析pyc文件到py文件的。就下载了这个pyc。看他提的pr。是报了一个Unsupported Node type: 27错误。但是看他发的报错。感觉不止这一个报错。

E:\temp_vc\pycdc\build_v141\Release>pycdc.exe model.pyc >model.py
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported argument found for LIST_EXTEND
Unsupported opcode: LIST_TO_TUPLE
Unsupported opcode: CALL_FUNCTION_EX
Unsupported opcode: DICT_MERGE
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported argument found for LIST_EXTEND
Unsupported opcode: LIST_TO_TUPLE
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported Node type: 27
Unsupported Node type: 27
Warning: block stack is not empty!
Unsupported Node type: 27
Unsupported Node type: 27
Warning: block stack is not empty!
下载项目

OK,先fork一下这个项目,fork完成之后了,这个项目就到你的仓库了。本地的话,就直接git clone一下自己fork的仓库。把项目先下载到本地,准备编译运行,这个pycdc项目是c++写的。用的是cmake进行编译的。

环境说明:

  1. cmake

  2. vs2022

  3. python 3.9

我这边的话,就是这么多了。编译的话很简单,下载cmake后,在项目目录,cmake一下就会自动生成vs项目,打开vs项目编译生成pycdc.exe和pycdas.exe后就行。这个pycdc是将pyc变成py,这个pycdas解析pyc文件,输出python的字节码。

我们随便写个hello,保存为test.py测试一下效果

print("hello,world")

使用命令

python -m py_compile test.py

使用pycdc对生成的test2.cpython-39.pyc进行反编译

可以看到结果,已经反编译成功了。

OK,我们继续

尝试调试程序

我们修改一下这个接受参数,再pycdc.cpp里面。

手动给他加上我们需要的参数,方便后期调试。好了,经过调试。发现问题。

class t(test.t):pass

这样的代码就会报错,会错误的识别为

def t():pass

并且会报错,Unsupported Node type: 27。

经过调试,最终将问题集中到这里ASTree.cpp

 while (TOS_type == ASTNode::NODE_NAME) {bases.resize(basecnt + 1);bases[basecnt] = TOS;basecnt++;stack.pop();TOS = stack.top();TOS_type}

这个地方,CALL_FUNCTION_A字节码这个位置。因为我们传参的是test.t。这个玩意被识别为NODE_BINARY。没有被识别为:NODE_NAME 。导致这个while循环没进入,这个NODE_NAME没有被清除,导致后面一些解析错误。变成这样就可以了

 while (TOS_type == ASTNode::NODE_NAME || TOS_type == ASTNode::NODE_BINARY) {bases.resize(basecnt + 1);bases[basecnt] = TOS;basecnt++;stack.pop();TOS = stack.top();TOS_type = TOS.type();}

修改完毕后,

git add ASTree.cpp
git commit -m "fix"
git push

上传到我们自己的仓库。

提交pr

我们就可以向源项目提交pr了,说明一下自己的修改的原因,以及效果。就可以了。我这边的话,是自己提交了一个issue,在issue里面说了这个报错。提交的pr链接的这个issue。

等待被合并

我这边大概等了一个星期左右。(我猜是为python3.12做适配了,回复我那天就更新了python3.12适配,并且后面回复就很及时了)作者回复我了,让我加一些测试文件进去。我加了之后。因为有时差,作者回复一般都是晚上12点以后了。我加完测试文件后。第二天我的请求就被merge了。

整个流程就完成了,我也成为这个项目的贡献者了,虽然实际修改代码只有一行(偷偷的笑)。


 今天就到这里,如果您觉得不错,欢迎关注。如有错误,欢迎私聊指正。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重磅解读 | 阿里云 云网络领域关键技术创新

云布道师 10 月 31 日,杭州云栖大会,阿里云技术主论坛带来了一场关于阿里云主力产品与技术创新的深度解读,阿里云网络产品线负责人祝顺民带来《云智创新,网络随行》的主题发言,针对阿里云飞天洛神云网络(下…

捷诚管理信息系统 SQL注入漏洞复现

0x01 产品简介 捷诚管理信息系统是一款功能全面,可以支持自营、联营到外柜租赁的管理,其自身带工作流管理工具,能够帮助企业有效的开展内部审批工作。 0x02 漏洞概述 捷诚管理信息系统CWSFinanceCommon.asmx接口存在SQL注入漏洞。未经身份认…

一个快递包裹的跨国之旅

事情要从今年三月份说起,一位爱尔兰的同事在6月份结婚,团队同事准备了中国风的丝绸画轴、领带、丝巾作为礼物。3月份开始邮寄,4月初爱尔兰方面收件,5月份因为文件不足、不完整、不正确等原因被取消进口,7月份退回到大连…

VR全景打造亮眼吸睛创意内容:三维模型、实景建模

随着VR技术在不同行业之间应用落地,市场规模也在快速扩大,VR全景这种全新的视觉体验为我们生活中的许多方面都带来了无限的可能。更加完整的呈现出一个场景或是物体的所有细节,让浏览者感受到自己仿佛置身于现场一般;其次&#xf…

Linux应用开发基础知识——网络通信编程(九)

前言: 通过学习为后续Linux网络编程奠定基础。首先介绍网络编程的概念,即网络协议分层,旨在帮助读者对网络建立初步的、全面立体的认识,其次介绍包括协议、端口、地址等;最后介绍应用非常广泛的传输控制协议&#xff0…

基于nodejs学校宿舍管理系统-计算机毕设 附源码45118

nodejs学校宿舍管理系统 摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对学校宿舍管理系统等…

手机 IOS 软件 IPA 签名下载安装详情图文教程

由于某些应用由于某些原因无法上架到 appStore 或者经过修改过的软件游戏等无法通过 appStore 安装,我们就可以使用签名的方式对相应软件的IPA文件进行签名然后安装到你的手机上 这里我们使用爱思助手进行签名安装,爱思助手支持两种方式,一种…

浅析ChatGPT中涉及到的几种技术点

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

抖音本地生活服务商申请怎么做?无保证金的申请方法来了

想做抖音的本地生活服务项目,却不知道去哪里申请,或者如何申请,其实,官方的通道在今年上半年还是有的,自己去平台上提交资料申请就可以了,但需要缴纳高额的保证金。 而在今年下半年,平台已经关…

关于校园网使用罗技flow功能

目录 情况概述问题及解决方案 情况概述 我目前设备是一台Macbook air m1处理器,学校给配了一台windows台式,台式机不能连蓝牙,不能连wifi,只能用网线,我的需求是想让mac和windows共用一套键鼠,在了解到罗技…

linux制作 ext4镜像image 脚本demo

结构如下: build_linux_targetfs.sh #!/bin/bashCHECK_MARK"\033[0;32m\xE2\x9C\x94\033[0m" X_MARK"\033[0;1;31mX\033[0m"export TOP_DIR$PWD export TARGET_IMAGE_PATH$TOP_DIR/filesystem/targetfs-images export BSP_IMAGE_PATH${TOP_DI…

如何优雅的避免空指针异常

文章目录 1.数据准备2.实战:获取用户所在的城市2.1.直接获取;容易出现空指针异常。2.2.使用if-else判断;避免了出现空指针的问题,但是代码结构层次嵌套多,不美观2.3.使用工具类美化一下if判断代码2.4.使用Optional解决…

自动化网络图软件

由于 IT 系统的发展、最近向混合劳动力的转变、不断变化的客户需求以及其他原因,网络监控变得更加复杂。IT 管理员需要毫不费力地可视化整个网络基础设施,通过获得对网络的可见性,可以轻松发现模式、主动排除故障、确保关键设备可用性等。 为…

fastdfs-client-java-1.30 maven 打包安装

1. 进入源代码目录,打开cmd mvn clean install 或者 mvn package 问题不大的话会在同级目录target目录下生成打包后文件 2. 当前目录下cmd进行maven安装 mvn install:install-file -DgroupIdorg.csource -DartifactIdfastdfs-client-java -Dversion${version} -D…

JavaWeb开发——文件上传

1 简介 文件上传:将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程 文件上传涉及到两部分:前端程序 服务端程序 前端程序 【三要素】:① 需要定义一个form 表单,且表单里需定义一个类型为“ …

SWAT-MODFLOW耦合

耦合模型被应用到很多科学和工程领域来改善模型的性能、效率和结果,SWAT作为一个地表水模型可以较好的模拟主要的水文过程,包括地表径流、降水、蒸发、风速、温度、渗流、侧向径流等,但是对于地下水部分的模拟相对粗糙,考虑到SWAT…

【机器学习】034_多层感知机Part.2_从零实现多层感知机

一、解决XOR问题 1. 回顾XOR问题: 如图,如何对XOR面进行分割以划分四个输入 对应的输出 呢? 思路:采用两个分类器分类,每次分出两个输入 ,再借助这两个分类从而分出 。 即采用同或运算,当两…

京东商品详情数据接口【京东API接口开发系列】,监控京东价格走势,接口代码示例,可高并发批量获取

京东开放平台提供了API接口来访问京东商品详情。通过这个接口,您可以获取到商品的详细信息,如商品名称、价格、库存量、描述等。 以下是使用京东商品详情API接口的一般步骤: 注册并获取API权限:您需要在京东开放平台上注册并获取…

透视maven打包编译正常,intellj idea编译失败问题的本质

前言 maven多模块类型的项目,在Java的中大型应用中非常常见, 在 module 很多的情况,经常会出现各种各样的编辑依赖错误问题,今天记录一种比较常见的 case : A 子模块依赖 B 子模块,在 Terminal 上终端上 …

高压开关柜无线测温系统

高压开关柜无线测温系统是一种用于监测高压开关柜内部温度的系统。依托电易云-智慧电力物联网,它采用无线通信技术,实现对开关柜内部温度的实时监测和数据传输。下面我将为您介绍高压开关柜无线测温系统的组成、原理、功能以及优势。 一、系统组成 高压开…