Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: x64core en 16 Junio 2012, 11:39 am



Título: Problema Incrementar puntero
Publicado por: x64core en 16 Junio 2012, 11:39 am
Buenas a todos vengo con este codigo curioso, estaba codeando y tenia problemas para acceder a los campos, mi logica me decia
una cosa XD, vean:


Código:
#include <Windows.h>
struct hola
{
DWORD a;
DWORD b;
DWORD* c;
};
hola jh;
int main()
{

jh.a = 10;
jh.b = 20;

DWORD* temp =  &jh.b;

temp = (DWORD*) temp + 4;

return 0;
}

pero por ejemplo si el puntero temp lo quiero incrementar +2 como seria? ojo no quiero incremntar 2 posiciones sino simplemente sumarle 2...
intente hacerle un casting de char* pero no funciono :|

alguien sabe?


ED: ( 5 min despues XD ) si funciono con el casting de unsigned char* haha, siempre en la madrugada me salen estos pequeños errores, quiza e sueño XD


Título: Re: Problema Incrementar puntero
Publicado por: The Swash en 16 Junio 2012, 14:09 pm
Hola,

Lo correcto sería:
Código
  1. Temp = (DWORD*)((int)Temp + 4);

Y digo lo correcto porque al menos así lo tengo entendido, lo que hace es convertir a entero para poder sumar como cualquier par de números y luego volver a hacer casting al tipo de puntero que es.
Con esto lo que harías sería incrementar la dirección del puntero pero si quieres incrementar su contenido deberás "desreferenciarlo".

Código
  1. *Temp = (*Temp) + 4;

Un saludo,
Iván Portilla.


Título: Re: Problema Incrementar puntero
Publicado por: david_BS en 16 Junio 2012, 17:01 pm
hola por ahí este post te pueden ayudar

http://foro.elhacker.net/programacion_cc/tutorial_obtener_direccion_de_struct_dinamicamente-t358284.0.html

en cuanto el tipo de dato BYTE (unsigned char) es el que necesitás para incrementar de a un byte lógicamente, aunque el tipo puntero ya sabés que es de 4 bytes para el tipo que sea.


Título: Re: Problema Incrementar puntero
Publicado por: Khronos14 en 16 Junio 2012, 17:09 pm
Podrías hacer:

Código
  1. *Temp = (*Temp) + 2;
  2.  

Saludos.


Título: Re: Problema Incrementar puntero
Publicado por: x64core en 16 Junio 2012, 19:19 pm
gracias a todos, los agradece (http://s14.postimage.org/jw2owid3x/smiley.gif)


Título: Re: Problema Incrementar puntero
Publicado por: david_BS en 16 Junio 2012, 20:32 pm
gracias a todos, los agradece (http://s14.postimage.org/jw2owid3x/smiley.gif)

si querías incrementar el valor de un número sería como ya dijeron anteriormente:

Código:
int main()
{
int num = 6;
DWORD* p = (DWORD*)&num;
*p = (*p)+2;
printf("%x\n", p);
printf("%d\n", *p);
system("pause");
return 0;
}

pero yo había entendido que querías incrementar el puntero en dos bytes, lo cual sería algo así (se muestran ambos casos según el tipo de puntero) :

Código:
int main()
{
unsigned long num = 16;
DWORD* p = (DWORD*)&num;
// p = p+2;//-----------------------> incrementa 2*4 bytes = 8 bytes
printf("%x\n", p);
printf("%x\n", p+2);
printf("%d\n", *p);

unsigned char* a = (unsigned char*)p;
// a = a+2;//-----------------------> incrementa 2*1 byte = 2 bytes
printf("%x\n", a);
printf("%x\n", a+2);
printf("%d\n", *a);

unsigned long x = (unsigned long)*a;
printf("%d\n", x);

system("pause");
return 0;
}

igualmente ya se que lo habías resuelto haciendo un cast al tipo BYTE, pero pongo esta explicación para otras personas que tengan dudas