如果您可以访问 sys.modules,是否可以为加载的模块构建人类可读的源代码?
人们告诉我你不能,但我确信这在 Python 中是可能的。
如果您可以访问 sys.modules,是否可以为加载的模块构建人类可读的源代码?
人们告诉我你不能,但我确信这在 Python 中是可能的。
您可以使用标准库的dis模块来反汇编 Python 编码的模块:它产生绝对是人类可读的源代码,而不是Python源代码,而是字节码源代码。从煎蛋卷开始将鸡蛋重新组合起来有点困难。
Python 2.3 曾经有一个反编译器(请参阅此处),但我不知道过去几年是否有人一直在维护它,这表明开源社区对这项任务没有太大兴趣。如果你不同意,你可以分叉那个项目,创建你自己的项目,目标是反编译 2.7(或任何你渴望反编译的 Python 版本),并吸引其他热衷于这项任务的人——如果你能找到他们,那就是。
通常,源代码将在文件系统中可用,在可以从 sys.modules 中轻松发现的位置。
for name, mod in sys.modules.items():
try:
fname = mod.__file__
except AttributeError:
continue
if fname.endswith(".pyc"):
fname = fname[:-1]
try:
fcode = open(fname)
except IOError:
continue
code = fcode.read()
# .. do something with name and code