Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Wd10 en 19 Enero 2013, 23:46 pm



Título: Problema con acceder a una estructura
Publicado por: Wd10 en 19 Enero 2013, 23:46 pm
Hola a todo el EH, me gustaría saber si podrian ayudarme, mi problema es este:
tengo una estructura:

typedef struct _RE_MORE {
     BYTE      r1;
     BYTE      r2;
     BYTE      r3;
     BYTE      r4;
     WORD      r5;
     WORD      r6;
     DWORD     RX1;
     DWORD     RX2;
} RE_MORE, *LPRE_MORE;


typedef struct _Game02 {
     WORD           re1;
     WORD           re2;
     WORD           re3;
     RE_MORE      remore[1];
} Game02 , *PGame02 ;
 

ahora declaro tengo un puntero de tipo Game02
y quiero acceder al miembro r1:


PGame02  puntero

Variable = puntero->remore[0].r1;


pero en variable no me almacena el valor que esta en r1.

por favor podrian decirme como puedo resolver este problema y cual es la mejor forma de hacerlo? Gracias


Título: Re: Problema con acceder a una estructura
Publicado por: avesudra en 20 Enero 2013, 00:24 am
¿Has puesto a apuntar el puntero hacia la estructura? te dejo un code que funciona:
Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. typedef struct _RE_MORE {
  5.     BYTE      r1;
  6.     BYTE      r2;
  7.     BYTE      r3;
  8.     BYTE      r4;
  9.     WORD      r5;
  10.     WORD      r6;
  11.     DWORD     RX1;
  12.     DWORD     RX2;
  13. }RE_MORE,*LPRE_MORE;
  14.  
  15.  
  16. typedef struct _Game02 {
  17.     WORD           re1;
  18.     WORD           re2;
  19.     WORD           re3;
  20.     RE_MORE      remore[1];
  21. } Game02 , *PGame02 ;
  22.  
  23. int main(int argc, char *argv[])
  24. {
  25.    Game02 game;
  26.    PGame02 gameP = &game;
  27.    int variable = gameP->remore[0].r1;
  28.    printf("Variable %d",variable);
  29.    return 0;
  30. }


Título: Re: Problema con acceder a una estructura
Publicado por: Wd10 en 20 Enero 2013, 00:30 am
Hola gracias por responder, pero a mi no me funciona  :huh:
veras hice este codigo:

#include <stdio.h>
#include <windows.h>
 
typedef struct _RE_MORE {
     BYTE      r1; // 7
     BYTE      r2; // 8
     BYTE      r3; // 9
     BYTE      r4; // 10
     WORD      r5; // 11,12
     WORD      r6;
     DWORD     RX1;
     DWORD     RX2;
}RE_MORE,*LPRE_MORE;
 
 
typedef struct _Game02 {
     WORD           re1; // 1,2
     WORD           re2; // 3,4
     WORD           re3; // 5,6
     RE_MORE      remore[1];
} Game02 , *PGame02 ;
 
BYTE pruebaarray[50] = {1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};



int main(int argc, char *argv[])
{
    PGame02 gameP = (PGame02)pruebaarray;

    int variable = gameP->remore[0].r1;
    printf("Variable %d",variable);
    return 0;
}

hice ese array para ver si de verdad obtenia el valor correcto y no me funciono



Título: Re: Problema con acceder a una estructura
Publicado por: x64core en 20 Enero 2013, 00:42 am
El problema es el alineamiento de la estructura, todo depende del compilador que utilices, y de los parametros que son pasados al compilador, generalmente los miembros de una estructura se alinean al tamaño de un DWORD, debido a que la accesos a posiciones de memoria por la CPU son más rapido si estan alineados , por eso mismo debes verificarlo, que compilador estas usando?

en VC++ se podes hechar una miraba a /zp
o usar

#pragma pack(push)
#pragma pack(alineamiento)

// Tu estructura

#pragma pack(pop)


Título: Re: Problema con acceder a una estructura
Publicado por: Wd10 en 20 Enero 2013, 00:53 am
Gracias a todos eso era!  ;-)



Aunque aun no entiendo bien