¿Cómo desreferenciar una ubicación de memoria de Python ctypes?

Quiero replicar el siguiente código c en los ctypes de python:

main() { long *ptr = (long *)0x7fff96000000; printf("%lx",*ptr); } 

Puedo averiguar cómo llamar a esta ubicación de memoria como un puntero de función, pero no solo hacer una desreferencia normal:

 from ctypes import * """ >>> fptr = CFUNCTYPE(None, None) Traceback (most recent call last): File "", line 1, in  File "/usr/lib/python2.6/ctypes/__init__.py", line 104, in CFUNCTYPE class CFunctionType(_CFuncPtr): TypeError: Error when calling the metaclass bases item 1 in _argtypes_ has no from_param method """ fptr = CFUNCTYPE(None, c_void_p) #add c_void_p since you have to have an arg fptr2 = fptr(0x7fff96000000) fptr2(c_void_p(0)) #python: segfault at 7fff96000000 ip 00007fff96000000 

Como allí hay un error de seguridad con el puntero de instrucción que apunta a esta ubicación de memoria, la está llamando con éxito. Sin embargo, no puedo leer la ubicación de la memoria:

 ptr = POINTER(c_long) ptr2 = ptr(c_long(0x7fff96000000)) #>>> ptr2[0] #140735709970432 #>>> hex(ptr2[0]) #'0x7fff96000000' #>>> ptr2.contents #c_long(140735709970432) 

    ctypes.cast .

     >>> import ctypes >>> c_long_p = ctypes.POINTER(ctypes.c_long) >>> some_long = ctypes.c_long(42) >>> ctypes.addressof(some_long) 4300833936 >>> ctypes.cast(4300833936, c_long_p) <__main__.LP_c_long object at 0x1005983b0> >>> ctypes.cast(4300833936, c_long_p).contents c_long(42)