Apuntadores, Apuntar a un espacio de memoria especifico

Iniciado por cyberserver, 1 Diciembre 2010, 04:51 AM

0 Miembros y 2 Visitantes están viendo este tema.

cyberserver

Hola amigos.!!!!!!

Mirelo lo que deceo hacer es apuntar un APUNTADOR o PUNTERO a un espacio de memoria especifico.... no a una variable si no a una direccion de memoria... algo como esto...



void *apuntador;

apuntador=0X00ff1250;

cout<<"El valor del apuntador es"<<*apuntador<<endl;




Si alguien me pudiera ayudar con algo de esto, lo agradeceria....

De antemano gracias. :O






Mr.Blue

#1
Busca sobre dobles punteros, sera eso lo que queres saber?

Ej:

char letra='A';
char* ptr=&letra; // a ptr pasas la direccion de memoria de letra
char **optr=&ptr; //a optr pasas la direccion de memoria de ptr

para ver la direccion en hexadecimal es con %x

Saludos


Eternal Idol

Si la direccion no es valida el programa morira al dar una excepcion no controlada, use int pero eso dependera de lo que haya en esa direccion:

Código (cpp) [Seleccionar]
int *apuntador = (int*)0x00ff1250;
cout << "El valor del apuntador es" << *apuntador << endl;
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

cyberserver

Muchas Gracias. es esactamente lo que estaba buscando de verdad muchas gracias.!!!

Oie pero en el tipo de apuntador tengo que especificar siempre el tipo. escuche que se podia poner


void *apuntador = (void*)0x00ff1250;



Pero me marca error. no se si realemente se pueda..!






pucheto

Cita de: cyberserver en 17 Diciembre 2010, 23:28 PM
Muchas Gracias. es esactamente lo que estaba buscando de verdad muchas gracias.!!!

Oie pero en el tipo de apuntador tengo que especificar siempre el tipo. escuche que se podia poner


void *apuntador = (void*)0x00ff1250;



Pero me marca error. no se si realemente se pueda..!
Te debe dar error dereferenciar esa posicion... pq void no tiene tipo (no tiene sentido dereferenciar un puntero a void)... y pq por ahi haces un acceso invalido a memoria.

winroot

Buenas!
En caso c++,

int* ptr=reinterpret_cast<int*>(0xfff);

Cual es el problema?
El problema es que, vos no podés escribir direcciones de memoria que no estén en el espacio de tu proceso.
En modo usuario, el programa tirará un error (page fault si no me equivoco ), que causará que el memory manager en caso de windows cierre el thread.
En kernel, llamada a KeBugCheckEx, pantalla azul orrible.
Si no me equivoco, hay unas apis en windows que sirven para saber si una dirección apuntada por un puntero se puede leer / escribir, IsBadWritePtr / IsBadReadPtr.
Un abrazo.
Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com

Eternal Idol

cyberserver el problema con void ya te lo respondio pucheto.

Lo que se podria añadir es que las excepciones por acceder a una direccion invalida en modo Usuario se pueden controlar (ver SEH) tanto en modo Usuario (de no hacerlo el proceso entero muere y no solo el hilo ofensor) como en modo Kernel (donde nunca vi a nadie que usara la STL ...) y por ultimo esas APIs estan desaconsejadas por Microsoft.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón