【发布时间】:2017-07-21 12:48:12
【问题描述】:
我们在我们的应用程序中使用嵌入式 cpython 作为脚本语言。我们在启动时修改 sys.path 以确保我们不会从应用程序外部执行代码,但是在他们的 PYTHONPATH 中有 sitecustomize.py 的用户导致代码在我们有机会修复 sys.path 之前执行,并且我们认为他们的代码发生了严重崩溃(不是异常,site.py 会优雅地捕获和处理)。
我相信正确的解决方法是在我们初始化 python 之前简单地从环境中清除 PYTHONPATH 变量,但我无法正确测试它,因为我无法重现问题。
我找到的最简单的方法是使用 ctypes 写入内存,例如:
import ctypes
p = (ctypes.c_char).from_address(0)
while True:
p[0] = 0
p = p + 1
但在 Python 3.5 中,它不允许我写入 c_char 类型,并给出错误 "TypeError: 'c_char' object does not support item assignment"。
我尝试了https://wiki.python.org/moin/CrashingPython 提供的一些方法,但均无济于事。
有没有可靠的方法让 Python 3.5 从纯 Python 代码中崩溃?
【问题讨论】:
-
您应该创建一个 指针 指向
c_char并为其编制索引。 -
你试过svn.python.org/view/python/trunk/Lib/test/crashers上的所有例子了吗?我无法访问 3.5,但在 repl.it 上运行时确实出现了一些崩溃,即:nasty_eq_vs_dict.py、mutation_inside_cyclegc.py、gc_inspection.py
-
谢谢,@user2357112,我以前没有使用过 ctypes,只是复制和粘贴代码,但现在我更仔细地研究它,这对我来说显然很有意义。
标签: python crash python-3.5