跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

pycdc 上手指南:从 .pyc 还原 Python 源码

pycdc 是一款支持 Python 1.0 到 3.13 的字节码反编译工具,可在源码丢失时从 .pyc 文件还原代码。文章记录了编译安装、基本用法、批量处理和常见坑点。跨版本兼容通过 -v 参数指定,结合 pycdas 分析字节码能应对不完整的情况。工具采用分层架构,解析层、AST 构建层、生成层,便于扩展。

雾岛听风发布于 2026/6/30更新于 2026/8/2428 浏览

pycdc 上手指南:从 .pyc 还原 Python 源码

有一次,我需要弄明白一个陈年 .pyc 里到底藏着什么逻辑,源代码早丢了。这种时候,pycdc 就能派上用场。

pycdc 是用 C++ 开发的 Python 字节码反编译工具,支持 1.0 到 3.13 全系版本。它包含两个核心部分:pycdas 负责反汇编,输出字节码指令;pycdc 则直接生成 Python 源码。我用过几个同类的工具,pycdc 在版本兼容和还原精度上做得最扎实,虽然偶尔也会有点小毛病。

编译安装

用 CMake 构建,没什么特别的:

git clone <project_repo>
cd pycdc
cmake -DCMAKE_BUILD_TYPE=Release .
make -j$(nproc)

Release 模式足够日常使用,需要调试时换成 Debug。

基本用法

最常见的场景:源码丢了,只剩 .pyc。直接反编译:

./pycdc important_script.pyc

如果你只关心字节码长什么样,想看看解释器怎么处理指令的,用 pycdas:

./pycdas third_party_module.pyc

不同 Python 版本的字节码格式差异很大,pycdc 能自动识别,但出错时最好用 -v 明确指定版本:

# Python 2.7 老代码
./pycdc -v 2.7 legacy_code.pyc
# 3.11 引入的新字节码特性
./pycdc -v 3.11 modern_feature.pyc

一次处理多个文件

真要批量搞一堆 .pyc,一个 for 循环就够了:

#!/bin/bash
for file in *.pyc; do
  echo "处理文件:$file"
  ./pycdc "$file" > "${file%.pyc}.py"
done

我习惯把输出重定向到文件,然后手动检查一遍——自动反编译偶尔会在代码间插入奇怪的空行,或者缩进不太对。

验证反编译效果

项目自带了测试脚本,可以用来检验反编译的准确性:

# 跑指定测试用例
python tests/run_tests.py --filter test_functions
# 多进程并行,快很多
python tests/run_tests.py -j 4

测试覆盖了表达式、控制流、异常处理等场景,自己修改源码后跑一遍测试很有用。

内部工作流程

pycdc 背后大致是三个步骤:字节码解析 → 构建抽象语法树(AST)→ 生成源代码。解析部分由 pyc_code.cpp 和 bytecode.cpp 处理,AST 的构建在 ASTree.cpp 里,最后输出可读代码。分层的好处是,适配新 Python 版本时,只要在 bytes 目录下加对应的解析模块,不用大改其他逻辑。

常遇到的坑

  • 反编译结果不完整:这时不能只看反编译输出,得结合 pycdas 的指令流一起分析。操作码的定义全在 bytecode_ops.inl 里,遇到陌生的可以查一下。
  • 版本识别错乱:直接 -v 强制指定。bytes 目录下面能看到该版本是否有对应的实现。
  • 复杂结构还原不理想:碰到闭包、生成器、装饰器嵌套很深的代码,还原后的样子可能不太自然。我的办法是先理解大致流程,再分块细看,别指望一次输出完美源码。

pycdc 目前已经支持到 Python 3.13,更新节奏还算快。用它不光能应急恢复源码,顺带也能加深对 Python 底层执行机制的感觉。

目录

  1. 编译安装
  2. 基本用法
  3. Python 2.7 老代码
  4. 3.11 引入的新字节码特性
  5. 一次处理多个文件
  6. 验证反编译效果
  7. 跑指定测试用例
  8. 多进程并行,快很多
  9. 内部工作流程
  10. 常遇到的坑
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2026最火的6款免费AI写作软件测评:ai写网文哪个好用?这款ai消痕工具
  • Chatwoot 私有化部署与网页集成实操
  • 基于 OpenRouter 构建免费云端 AI 开发工作流
  • Rust 异步 Web 框架 Axum 深入原理与高级用法
  • 商汤开源 SenseNova-MARS 多模态自主推理模型
  • 构建企业级私有化 AI:从大模型原理到本地智聊机器人全栈部署指南
  • Web 创建与设计实战指南
  • MS-S1 MAX 搭配 AI MAX 395 在 Ubuntu 24 下运行 gpt-oss 120B
  • @anthropic-ai/claude-code 快速上手指南
  • 《Agent Runtime 工程化》MCP 解决了什么,又没有解决什么?
  • AI 开发风险与治理:如何成为 AI 的主人而非被其绑架
  • UZH RPG AC-MPC:微分 MPC 赋能强化学习实现无人机竞速
  • JavaWeb 核心:JSON 数据交换与 Ajax 异步请求详解
  • ClawdBot 实战:语音会议录音转写与重点内容摘要翻译
  • 8 款主流公文 AI 写作工具深度测评与对比
  • 字节开源 DeerFlow 2.0:Super Agent 运行时基础设施详解
  • Java 智能自习室预约与运营管理系统
  • IT 行业现状分析与技术人职业发展及安全技术方向指南
  • Stable Diffusion 3.5 FP8 发布:显存降 40%,推理提速近半
  • 智能交通系统的 FPGA 进化论:从基础信号灯到动态调优

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online