Python ctypes habilidades de lectura de memoria

Debido a que me gusta mirar la estructura variable en la memoria, entré en contacto con esta biblioteca temprano y encontré otro uso hoy, ¡así que lo resolví!

Leer el contenido de la variable en la memoria

ctypes.string_at(ptr, size=-1)
Obtiene los bytes de la dirección especificada y la longitud especificada en la memoria, solo se obtiene un byte por defecto

ctypes.string_at(id(a),sys.getsizeof(a))
Debido a que se muestran los primeros 16 bytes de variables de Python (tipo desconocido), el contenido de los datos comienza desde atrás. Por tanto, se pueden omitir los primeros 16 bytes.

Determinar el contenido variable de la dirección de memoria.

ctypes.cast(obj, typ)
ctypes.cast(id(a),ctypes.py_object).value
Tenga en cuenta que la dirección aquí debe ser una dirección variable real, si no es una dirección variable, se ejecutará violentamente, saltará, etc.

ctypes.cast (int.from_bytes (bytes.fromhex ('10 6a c4 37 ee 01 00 00 '), byteorder =' pequeño '), ctypes.py_object) .value

El mecanismo es muy simple, es decir, familiarizado con la estructura del tipo de datos, obtener el tipo de acuerdo con el segundo conjunto de bytes, analizar la validez de la memoria de los datos de acuerdo con la estructura del tipo y decodificar el contenido.

Supongo que te gusta

Origin blog.csdn.net/jhsxy2005/article/details/114371993
Recomendado
Clasificación