
pycdc 快速上手覆盖 Python 1.0 到 3.13 全版本的字节码反编译工具【免费下载链接】pycdcC python bytecode disassembler and decompiler项目地址: https://gitcode.com/GitHub_Trending/py/pycdcpycdc 是一款用 C 编写的 Python 字节码反编译工具能把 .pyc 文件还原成可读的 Python 源码同时自带一个字节码反汇编器 pycdas。它从 Python 1.0 一直支持到最新的 3.13适合手上只有 pyc 文件、需要找回或读懂代码的开发者也适合想研究字节码执行机制的学习者。如何 3 分钟跑通 pycdc 安装与运行编译只需要 CMake 和一个 C 编译器三条命令搞定git clone https://gitcode.com/GitHub_Trending/py/pycdc cd pycdc cmake -DCMAKE_BUILD_TYPERelease . make -j4编译完成后会生成pycdc反编译器和pycdas反汇编器两个可执行文件。反编译一个文件就是把输出重定向到文本文件./pycdc demo.pyc demo.py想先看指令流就跑./pycdc的兄弟命令./pycdas demo.pyc它会按行号逐条打印操作码方便对照源码定位问题。pycdc 的核心能力拆解 两个工具两种看法反汇编和反编译是两件事。pycdas 负责把字节码翻译成指令清单每条指令对应源码行号适合排查pycdc 则把指令流重组成语法树输出接近原始代码的 Python 源码错误信息走 stderr所以重定向 stdout 时不会把报错混进源码里。 从 Python 1.0 到 3.13 的全版本覆盖这是 pycdc 最突出的特点每个 Python 版本的操作码映射独立维护在bytes/目录下的python_X_Y.cpp文件中从 1.0 一路排到 3.13。3.13 这一代改动较大引入了带_A后缀的绝对地址指令和一套仪器化instrumentation指令pycdc 都已经适配。仓库自带的tests/compiled/里放了 190 个不同版本编译出来的 pyc 样例跑一次make check JOBS4就能验证各版本的解析是否回归。 不只认 .pyc 文件Python 的marshal.dumps(compile(...))输出的是裸代码对象没有文件头、不携带版本信息。pycdc 和 pycdas 都支持直接读这种数据用-c -v 3.13显式指定版本号即可这在处理嵌入式脚本或自定义打包格式时很实用。pycdc 适合哪些使用场景找回丢失的源码老项目只剩下部署包里的 pyc或者第三方库没有公开源码先用 pycdas 摸清结构再用 pycdc 恢复大部分逻辑比纯手工读指令快得多。安全分析分析可疑脚本时pyc 往往只是编译壳反编译后再配合反汇编定位关键字符串和跳转逻辑是常规动作。学习字节码与解释器开发同一份源码分别用不同 Python 版本编译用 pycdas 对比两个版本的指令差异能直观看到操作码体系是怎么演进的这在教学里几乎没有替代品。pycdc 和同类工具的区别工具版本支持特点pycdc1.0 3.13 全覆盖反编译器 反汇编器双工具uncompyle6较新版本支持有限约 3.9 及以下仅反编译decompyle3仅覆盖 3.7 3.9 一代仅反编译对比的核心差异在版本宽度如果你的文件是 3.13、3.12 这类新产物或者是 Python 2 时代留下来的老 pycpycdc 基本是目前唯一能直接处理的选择。客观说反编译输出并非 100% 还原复杂控制流和元编程场景仍可能需要人工修补但日常代码的可读度已经足够。常见问题版本识别失败和输出不完整怎么办报错说无法识别版本先确认 pyc 头部的 magic number 对应的解释器版本本机 Python 可以用importlib.util.MAGIC_NUMBER对照。如果该版本的映射文件还没加进bytes/就只能等更新另外注意 3.13 起部分指令需要精确匹配用低版本的 pycdc 二进制处理新文件会直接失败。输出不完整或结构错乱pycdc 的报错都打到 stderr重定向时先看看错误日志然后用./pycdas反汇编找到第一条出问题的指令对照tests/里相同语法的期望输出判断是个例还是已知局限。测试脚本在tests/run_tests.py也可以用make check FILTER某个文件名只跑单条测试。一句话总结只要你的场景里出现只有字节码、想要源代码pycdc 就是工具箱里该备的那件工具——去仓库看看自己编译一个试试手。【免费下载链接】pycdcC python bytecode disassembler and decompiler项目地址: https://gitcode.com/GitHub_Trending/py/pycdc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考