Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cyberserver en 1 Diciembre 2010, 04:51 am



Título: Apuntadores, Apuntar a un espacio de memoria especifico
Publicado por: cyberserver en 1 Diciembre 2010, 04:51 am
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...

Código:

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


Título: Re: Apuntadores, Apuntar a un espacio de memoria especifico
Publicado por: Mr.Blue en 1 Diciembre 2010, 06:24 am
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



Título: Re: Apuntadores, Apuntar a un espacio de memoria especifico
Publicado por: Eternal Idol en 1 Diciembre 2010, 11:13 am
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
  1. int *apuntador = (int*)0x00ff1250;
  2. cout << "El valor del apuntador es" << *apuntador << endl;


Título: Re: Apuntadores, Apuntar a un espacio de memoria especifico
Publicado por: 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

Código:
void *apuntador = (void*)0x00ff1250;


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


Título: Re: Apuntadores, Apuntar a un espacio de memoria especifico
Publicado por: pucheto en 18 Diciembre 2010, 01:52 am
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

Código:
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.


Título: Re: Apuntadores, Apuntar a un espacio de memoria especifico
Publicado por: winroot en 18 Diciembre 2010, 03:10 am
Buenas!
En caso c++,
Código:
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.


Título: Re: Apuntadores, Apuntar a un espacio de memoria especifico
Publicado por: Eternal Idol en 18 Diciembre 2010, 21:10 pm
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.