拥有地址

时间:2018-01-22 15:10:26

标签: python ctypes

我能够在Python 3中获得对象的正确地址。

使用hex(id(Object))

class TestObject:
    myMemberData = 5

obj = TestObject()

#Using repr
print(repr(obj))

#Getting address manually!
address = hex(id(obj))
print(address)

#I'd like something like this:
#@address.myMemberData = 6

#OUTPUT:
<__main__.TestObject object at 0x7f32f3a7f160>
0x7f32f3a7f160

但现在我需要能够做相反的事情。我希望能够操纵并到达该特定地址的对象。所以我可以访问并改变它的成员数据。

我做了一些研究并得到了这个:

>>> from ctypes import string_at
>>> from sys import getsizeof
>>> from binascii import hexlify
>>> a = 0
>>> print(hexlify(string_at(id(a), getsizeof(a))))
b'bc0100000000000040cf9c00000000000000000000000000'
>>> a = 1
>>> print(hexlify(string_at(id(a), getsizeof(a))))
b'fc0200000000000040cf9c0000000000010000000000000001000000'
>>> a = 2
>>> print(hexlify(string_at(id(a), getsizeof(a))))
b'5c0000000000000040cf9c0000000000010000000000000002000000'
>>> a = 3
>>> print(hexlify(string_at(id(a), getsizeof(a))))
b'2f0000000000000040cf9c0000000000010000000000000003000000'
>>> 

我认为这很接近,因为你可以看到第7个LSB在变量a的值上发生了变化。但是,这仍然没有给我一个操纵对象成员数据的解决方案!

我还读到了 CTypes ,它看起来非常有趣并且接近我想要的。但缺乏一个如何做我想要的基本例子,如果CType甚至可以做到的话。

TL; DR 如果我能够获取对象的地址,我将如何使用该地址来操纵该对象的成员数据?

0 个答案:

没有答案