C/Visual C - Lectura de memoria

 
Vista:

Lectura de memoria

Publicado por Pablo (4 intervenciones) el 29/03/2005 00:57:49
Quisiera saber como puedo almacenar en una variable el valor contenido en una zona de la memoria en concreto. Es decir, que por ejemplo yo le indique el bloque de memoria 1450 y me diga lo que contiene. Supongo que se hara con punteros pero nose como. Seguro que con un codigo de ejemplo lo comprendo mejor. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Lectura de memoria

Publicado por chuidiang (677 intervenciones) el 29/03/2005 09:08:17
Hola.

Efectivamente, se puede hacer con punteros.
Declaras un puntero al tipo de dato que quieres leer y lo haces apuntar a la direccion de memoria.
Por ejemplo, si en 1450 hay un entero (4 bytes)

int *p = 1450;
printf ("El entero es %d\n", *p);

Un detalle. Según el sistema operativo que uses, las direcciones que veas pueden ser relativas al espacio de memoria asignado a tu programa, no direcciones de memoria absolutas.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lectura de memoria

Publicado por Pablo (4 intervenciones) el 29/03/2005 10:08:55
Chuidiang, gracias por tu colaboracion. Ese codigo que tu me has puesto fue el primer intento que hice. Sin embargo me da error en tiempo de ejecucion y por eso mismo consulte aqui. Supogo que se debera a que lo que hay almacenado en esa direccion de memoria no se puede guardar en un int o cualquiero otro tipo. Me equivoco? Conoces alguna manera de que muestre lo que hay almacenado, sea lo que sea, aunque no sea entendible humanamente? Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lectura de memoria

Publicado por chuidiang (677 intervenciones) el 29/03/2005 16:58:12
Hola de nuevo:

No estaría de más que me dijeras qué error de ejecución te da (y de paso qué sistema operativo).
Si es uno del estilo de "violación de segmento" o algo de eso, se debe a que la dirección de memoria queda fuera del alcance de tu programa y no tienes acceso a ella para leer o escribir.
Si es así, en linux al menos, hay funciones estilo mmap() que te permiten "mapear" una direccion de memoria real sobre tu zona de memoria de programa y así acceder a ella. Si no estás en linux, habría que buscar las funciones equivalentes de tu compilador.

Aparte de todo esto, si no sabes el contenido, siempre puedes hacer un puntero a char e ir leyendo byte a byte

char *p = direccion;
... p[0], p[1], p[2], etc.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lectura de memoria

Publicado por chuidiang (677 intervenciones) el 29/03/2005 17:09:15
Hola de nuevo:
Se me ocurre otro tema. Normalmente las direcciones de memoria de enteros deben ser multiplos de 4. Prueba con lo del char * a ver si hay mas suerte o incluso con una dirección de memoria cercana y que sea multiplo de 4. Creo que en tu ejemplo era 1450. Puedes probar con 1448 o 1452.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar