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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  que problemas puede causar memcpy al introducir un buffer de datos en un struct
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: que problemas puede causar memcpy al introducir un buffer de datos en un struct  (Leído 2,748 veces)
marvic

Desconectado Desconectado

Mensajes: 12


Ver Perfil
que problemas puede causar memcpy al introducir un buffer de datos en un struct
« en: 7 Octubre 2012, 21:55 pm »

Hola

Estoy documentando un programa y necesito literatura (en ingles mejor) para explicar  que problemas podria haber al cambiarlo de maquina,
la cuestion es qeu tengo unos datos generados de una estructura, en forma de buffer, que luego yo vuelvo a asignar a la estructura de la siguiente manera:

memcpy(&estructura1,"\x00\x00\x00\x00\x00\x00\x00\x00",8);

en este caso
estructura1{
    int a;
    int b;
}

pero el struct podria ser de cualquier tipo de componentes. arrays char...

Necesito literatura sobre si esta manera de copiar el valor directamente podria dar problemas en diferentes arquitecturas por gestionar la memoria del struct de diferente manera..

Alguien me podria ayudar, realmente necesito encontrar apuntes, o algun libro o algun sitio donde pueda leer sobre esto..

Muchas gracias



En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: que problemas puede causar memcpy al introducir un buffer de datos en un struct
« Respuesta #1 en: 8 Octubre 2012, 02:31 am »

Estoy documentando un programa y necesito literatura (en ingles mejor) para explicar  que problemas podria haber al cambiarlo de maquina
La función "memcpy" no debe dar problemas siempre y cuando las direcciones de origen y destino así como el numero de caracteres a copiar sean los correctos. Aquí nos convendría que dieras una descripción mas detallada del programa.


En cuanto al caso particular que mencionas:
memcpy(&estructura1,"\x00\x00\x00\x00\x00\x00\x00\x00",8);

en este caso
estructura1{
    int a;
    int b;
}
Das por sentado que el tamaño del tipo "int" es cuatro, si ese no es el caso, por ejemplo si "sizeof(int)" es igual a dos, la función escribiría fuera de la región en memoria del objeto y eso seria un error.


Necesito literatura sobre si esta manera de copiar el valor directamente podria dar problemas en diferentes arquitecturas por gestionar la memoria del struct de diferente manera.
No recuerdo uno enfocado específicamente en el tema. Una opción seria leer los estándares de C (o alguno de sus borradores) pero son documentos muy pesados (muy técnicos). Otra opción seria leer un libro enfocado en C estándar, buena parte de las recomendaciones que se dan al seguir el estándar tienen que ver con el tema de la portabilidad.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: que problemas puede causar memcpy al introducir un buffer de datos en un struct
« Respuesta #2 en: 8 Octubre 2012, 14:32 pm »

¡Buenas!

Otro posible error tendria que ver con la alineacion de los registros dentro del struct. Los distintos campos no tienen porque mantener la misma posicion relativa con respecto a la direccion en la que empieza el struct en distintos compiladores.

Te recomiendo que no utilices un buffer fijo, sino que ese buffer lo crees a partir de otro struct. Esto no tampoco te asegurara que siempre funcione bien. Por ejemplo, si compilas el programa con distintos compiladores que guarden los struct en ficheros binarios (siempre y cuando guardes el bloque entero del struct aplicando un sizeof para saber los bytes que ocupa), volveras a poder tener problemas con la alineacion de los campos del struct, y te podra volver a dar errores de datos mal inicializados o fallos de segmentacion...

Si quieres asignar valores a un struct desde un buffer utilizando memcpy, y que te funcione siempre, tendras que comprobar los tamaños del tipo de dato de tu compilador y la alineacion de los campos dentro del struct y tendras que compilar siempre con dicho compilador. (Si esto es incorrecto corregidme, pero creo que es asi)

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
std::cin puede causar un buffer overflow?
Programación C/C++
Sauruxum 1 2,800 Último mensaje 8 Noviembre 2010, 22:23 pm
por Littlehorse
Que problemas puede causar una bolsa en el teclado?
Hardware
raul338 5 4,638 Último mensaje 16 Junio 2011, 21:10 pm
por raul338
Problema con memcpy() [SOLUCIONADO]
Programación C/C++
SARGE553413 4 3,093 Último mensaje 22 Noviembre 2013, 19:23 pm
por SARGE553413
Problemas con programa usando struct
Programación C/C++
Fyllio 2 2,142 Último mensaje 28 Noviembre 2013, 22:30 pm
por Fyllio
[SOLUCIONADO] Consulta - Introducir varios datos en Struct [C++]
Programación C/C++
DeMoNcRaZy 5 5,977 Último mensaje 9 Marzo 2015, 22:03 pm
por DeMoNcRaZy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines