elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [duda] Struc en C/C++, direcciones en memoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [duda] Struc en C/C++, direcciones en memoria  (Leído 2,633 veces)
CSQCasimiro

Desconectado Desconectado

Mensajes: 20



Ver Perfil
[duda] Struc en C/C++, direcciones en memoria
« en: 31 Agosto 2012, 21:09 pm »

hola a todos, como andan ? , veran, estoy optimizando un codigo mio con funciones super genericas (que sean capases de resivir cualquier tipo de estruc y recorrer cada uno de sus campos) , el tema es que realizandolo me surgio una duda, sobre como son asignados los espacios en memoria de una estructura, por ejemplo la siguiente:

Código
  1.  
  2. struct dato
  3. {
  4.    int ID;
  5.    int lock;
  6. };
  7.  
  8.  

yo se que si le doy un sizeof (dato) , me dará 8 ( cada dato int ocupa 4 byte), mi pregunta es esta, supongamos que la estructura empieza en la direccion de memora 0x0001 , esa dirección de inicio, también corresponde a la de inicio de int ID ? y si le sumo 4 byte mas, osea, 0x0005 , esa seria la dirección de memoria de int lock ?

desde ya muchas gracias.


En línea

"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [duda] Struc en C/C++, direcciones en memoria
« Respuesta #1 en: 31 Agosto 2012, 21:22 pm »

Hola CSQCasimiro pues mira no lo sabía pero tampoco está de más compilar este código que hecho y comprobarlo , y sí , es tal y como dices.Una cosita cuida la ortografía  :o reCiBir , capaCes.
Código
  1. #include <stdio.h>
  2.  
  3. struct dato
  4. {
  5.    int ID;
  6.    int lock;
  7. };
  8. int main()
  9. {
  10.    struct dato dato1;
  11.    printf("Direccion de la Estructura: \t%X\n",&dato1);
  12.    printf("Direccion de ID: \t\t%X\n",&dato1.ID);
  13.    printf("Direccion de lock: \t\t%X\n",&dato1.lock);
  14.    return 0;
  15. }
  16.  
Mi salida es esta:
Código:
Direccion de la Estructura      28FF18
Direccion de ID                 28FF18
Direccion de lock               28FF1C

Process returned 27 (0x1B)   execution time : 0.005 s
Press any key to continue.
Si restas la dirección de lock (28FF1C) a la dirección de 28FF18, te queda 4 que es el largo de bytes de ID , los bytes de lock , serían:
Primer byte:   28FF1C
Segundo byte: 28FF1D
Tercer byte:    28FF1E
Cuarto byte:   28FF1F
¡Un saludo!


« Última modificación: 31 Agosto 2012, 21:36 pm por avesudra » En línea

Regístrate en
CSQCasimiro

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: [duda] Struc en C/C++, direcciones en memoria
« Respuesta #2 en: 31 Agosto 2012, 21:34 pm »

genial, muchas gracias, me sacaste la duda :D
después mas tarde subiré acá la función en la que lo aplique como método practico por si alguien en algún futuro necesita un ejemplo de uso =P
huy que mal no note esas faltas de ortografía O_o

PD: viva la aritmética de punteros
« Última modificación: 31 Agosto 2012, 21:38 pm por CSQCasimiro » En línea

"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [duda] Struc en C/C++, direcciones en memoria
« Respuesta #3 en: 31 Agosto 2012, 21:39 pm »

genial, muchas gracias, me sacaste la duda :D
huy que mal no note esas faltas de ortografía O_o

PD: viva la aritmética de punteros

De nada , la que acabo de liar modificando el post dios  :xD , ten en cuenta que siempre es así , pero que también puedes declarar otros punteros en la estructura e inicializarlos como malloc o calloc, que lo que haría sería apuntar a otra zona de memoria pero el puntero estaría en esa estructura pero eso mismo , el Puntero(dirección de memoria) , no el dato, digo esto porque a lo mejor quieres acceder a un dato y al hacer esa optimización tuya accedes a un puntero. Lo mismo digo , antes no entendía porque la arítmetica de punteros era tan fascinante , pero ya sí.
« Última modificación: 31 Agosto 2012, 21:41 pm por avesudra » En línea

Regístrate en
CSQCasimiro

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: [duda] Struc en C/C++, direcciones en memoria
« Respuesta #4 en: 6 Septiembre 2012, 22:26 pm »

no me gusta revivir temas tan viejos, pero lo prometido es deuda...

es una función que busca en un archivo de struc de cualquier dimensión un dato int, y vos solo le pasas la ruta del archivo, a partir de cuantos byte empieza ese dato en la estructura, cuanto mide (es redundante por que es siempre 4, error mio) y la cantidad de registros que posee (para eso ya tengo otra función que mostrare mas abajo)

Código
  1.  
  2. int Buscar_int (const char* ruta,int principio /*luego de cuantos byte empieza el campo buscado en la estructura*/, int fin /* tamaño de int, si es redundante xd*/, int registros, int dato )
  3. {
  4.    FILE *f;
  5.    int buffer;
  6.  
  7.    f=fopen(ruta,"rb");
  8.  
  9.    for(int i=0; i< registros; i++)
  10.    {
  11.        fseek(f,pricipio,1);
  12.  
  13.        fread(buffer, fin, 1, f);
  14.  
  15.        if (buffer==dato) //se puede hacer otra con strcpy para cadenas de caracteres
  16.        {
  17.            fclose(f);
  18.            return i; //regresa lugar en el archivo en cual se encuentra
  19.        }
  20.    }
  21.  
  22.    fclose(f);
  23.    return -1; //-1 si no existe
  24. }
  25.  
  26.  

y la de cantidad de registros

Código
  1.  
  2. int Cant_registros(const char* ruta, size_t tam) //size_t es lo que regresa sizeof (tipo de variable)
  3. {
  4.    int tamanio;
  5.  
  6.    FILE *f;
  7.    f=fopen(ruta,"rb");
  8.    error_archivo("\t ERROR: no se pudo abrir el archivo - T x 78", &f);
  9.    //si, soy tan vago que hasta cree una función con un simple if(f==NULL) y mensaje...
  10.  
  11.    fseek(f,0,2);
  12.  
  13.    tamanio=(ftell(f)/tam);
  14.  
  15.    fclose(f);
  16.    return tamanio;
  17. }
  18.  

y ahora por que yo decía que eso era algo muy general ? por que en la facultad me mandaron un trabajo con 5 estructuras diferentes (y por ende archivos diferentes) y que en todas había que hacerle cosas similares y yo de vago cree esas funciones para cualquiera que sea la estructura.
En línea

"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Calculo direcciones de Memoria, Paginacion
Programación General
Darksythe 1 4,400 Último mensaje 5 Enero 2012, 21:41 pm
por modo_senin
Direcciones de memoria
Programación C/C++
Maik33 4 2,601 Último mensaje 17 Octubre 2012, 14:48 pm
por Maik33
Duda direcciones de memoria C « 1 2 3 »
Programación C/C++
dRak0 23 9,195 Último mensaje 19 Julio 2013, 16:38 pm
por rir3760
[Duda]Como resuelve el PE Loader direcciones de memoria en secciones ejecutables
Programación C/C++
BloodSharp 2 2,292 Último mensaje 24 Septiembre 2014, 19:46 pm
por BloodSharp
Algun crypter que modifique las direcciones de memoria ? « 1 2 »
Ingeniería Inversa
TrashAmbishion 14 8,578 Último mensaje 16 Julio 2016, 04:24 am
por TrashAmbishion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines