【发布时间】:2014-06-05 13:02:49
【问题描述】:
首先我想说这个问题纯粹是出于兴趣,我绝不打算在任何严肃的项目中使用如此邪恶的东西。 (是的,就是这样的问题)
我一直试图在 CPython 的内部工作中拼凑一些信息,据我所知,应该可以操纵小整数的实际值,这样(对于例如)1 + 2 可以评估为 3 以外的东西。我几乎不是这种低级黑客的专家,我所能达到的只是段错误。这是我到目前为止所得到的:
import ctypes
ctypes.c_int8.from_address(id(1) + 8).value = 2
我的印象是这样可以解决问题,但这只会导致任何试图评估 1 的语句因段错误而崩溃。虽然这是一个有趣的成就,但这并不是我想要的。我错过了什么吗?难道该行中的 c_int8 和 + 8 仅适用于某些平台?如果我确切地知道要查找什么,我会很乐意查找此内容,尽管我认为答案可能隐藏在 CPython 源代码中的某个地方。
【问题讨论】:
-
值不是只读的吗?
-
嗯,值肯定可以写入,我知道的就这么多了。如果我尝试设置它,然后使用相同的语法再次读取 .value ,我确实得到了新值......并且只有在我实际尝试直接使用数字 1 时才会出现段错误。所以,它显然设法改变一些东西;)