<br>Hola Marta:<div><br></div><div>Te envío algunas ideas, en código, para ver si puedes utilizarlas.</div><div><br></div><div><div>// tamaño suficiente para almacenar los datos de la máxima estructura</div><div>#define N 10000 </div>
<div><br></div><div>void leer_fichero_datos(const char nombre[], char mem[]) {</div><div>     FILE *f;</div><div>     </div><div>     f = fopen(nombre, "r");</div><div>     </div><div>     // leer los datos sobre una memoria</div>
<div>     </div><div>     fclose(f);</div><div>}</div><div><br></div><div>char memoria[N];</div><div><br></div><div>void iniciar_a_ceros(void) {</div><div>     int i;</div><div>     for (i = 0; i < N; ++i)</div><div>     {</div>
<div>         memoria[i] = \x00 ;</div><div>     }</div><div><br></div><div>}</div><div><br></div><div><br></div><div>void test_jose_luis(void) {</div><div>     </div><div>     // si la memoria es toda de 0</div><div>     iniciar_a_ceros();</div>
<div>     memcpy(&mod_highest_comp_data_inst_state, memoria,8);</div><div>     </div><div>     // si la memoria tiene datos</div><div>     </div><div>     // abrir fichero de datos</div><div>     </div><div>     // leer el número de objetos</div>
<div>     </div><div>     for (int i = 0; i < num_objetos; ++i) {</div><div>         </div><div>         // leer el nombre de la estructura</div><div>         </div><div>         // leer el tamaño de la estructura; dim</div>
<div>         </div><div>         // leer el contenido de la estructura</div><div>         </div><div>         // asignar los datos leidos a la estructura,</div><div>         // posiblemente seleccionada mediante un switch</div>
<div>         </div><div>         memcpy(estructura, contenido, dim);</div><div>         </div><div>     }</div><div>         </div><div>     // cerrar el fichero de datos</div><div>}</div><div><br></div><div><br></div><div>
Saludos</div><div>José Luis</div><div><br></div><div class="gmail_quote">El 25 de octubre de 2012 10:01, marta vic <span dir="ltr"><<a href="mailto:marvicekl@gmail.com" target="_blank">marvicekl@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Yo tengo un programa en c que se ejecuta con KLEE<div>KLEE lo que hace es de forma automatica obtener casos de prueba, </div>
<div>Te adjunto un ejemplo sencillo, y este ejemplo mas complejo para que veas como puede variar</div>
<div><br></div><div><div>Muchas gracias por la ayuda, la verdad que al principio me costo incluso encontrar esta solucion y cuando la encontre decidi que me quedaba con esto.</div><div>Pero si tienes una idea mejor me vendria genial.</div>

<div><br></div><div>Un saludo</div><div>Marta</div></div><div>___________________________________________________________________________</div><div><br></div><div><b>1 Este es el ejemplo de un fichero de datosde klee</b></div>

<div> en realidad producira muchos ficheros como este (en concreto creo que los datos de este caso no se corresponen exacatamente con los que te muestro luego, si son las mismas estructuras, pero creo que no corresponde el valor que introduzco luego.</div>

<div><br></div><div><br></div><div><br></div><div><div>ktest file : 'klee-last/test000005.ktest'</div><div>args       : ['wrapper_syncs.o']</div><div>num objects: 5</div><div>object    0: name: 'selection'</div>

<div>object    0: size: 4</div><div>object    0: data: 1</div><div>object    1: name: 'state_8'</div><div>object    1: size: 4</div><div>object    1: data: 0</div><div>object    2: name: 'state_20'</div><div>

object    2: size: 484</div><div>object    2: data: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'</div>

<div>object    3: name: 'state_24'</div><div>object    3: size: 8</div><div>object    3: data: '\x00\x00\x00\x00\x00\x00\x00\x00'</div><div>object    4: name: 'state_28'</div><div>object    4: size: 28</div>

<div>object    4: data: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'</div></div><div><br></div><div><br></div><div><br></div><div>_____________________________________________</div>

<div><br></div><div>Un ejemplo de como lo intrudiciria seria:</div><div>(aunque no se corresponden los datos con los del ejemplo anterior, si se corresponden las estructuras)</div><div><br></div><div><b>2 Las estructuras en este caso serian: en el mismo orden que se introducen posteriormente</b></div>

<div><br></div><div>typedef struct {int pos_offset;} MyModule_tc3_controller_state_t;</div><div><br></div><div><div>typedef struct {int drivemode;</div><div>int speed_arr[20];</div><div>int steering_arr[10][10];} MyModule_guidance_state_t;</div>

</div><div><br></div><div><div>typedef struct {int dir;</div><div>int angle;} MyModule_panning_controller_state_t;</div></div><div><br></div><div><div>typedef struct {int state;</div><div>int counter;</div><div>int angle;</div>

<div>signed int edge_start_angle;</div><div>signed int edge_end_angle;</div><div>signed int distance;</div><div>signed int heading;}</div></div><div><br></div><div>________________________________</div><div><br></div><div>

<div><b>3 INTRODUCCION DE LOS DATOS: Como se puede ver arriba, klee va a producir la info del tamaño de la estructura y yo voy a saber a que estructura se corresponde.</b></div><div><b><br></b></div><div><span style="white-space:pre-wrap">    </span></div>

<div><span style="white-space:pre-wrap">  </span>value_state = 0;</div><div><span style="white-space:pre-wrap"> </span>memcpy(&MyModule_autonomous_car_tc3_cntrl_inst_state,&value_state,4);</div>
<div><span style="white-space:pre-wrap">  </span>memcpy(&</div><div>MyModule_guidance_system_g_inst_state,"\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",484);</div>

<div><span style="white-space:pre-wrap">  </span>memcpy(&MyModule_targeting_system_pc_inst_state,"\x00\x00\x00\x00\x00\x00\x00\x00",8);</div><div><span style="white-space:pre-wrap">     </span>memcpy(&MyModule_targeting_system_bd_inst_state,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",28);</div>

<div><span style="white-space:pre-wrap">  </span></div></div><div><br></div><div><br></div><div><div class="gmail_quote">El 25 de octubre de 2012 00:06, José Luis Torre <span dir="ltr"><<a href="mailto:joseluistorrehernandez@gmail.com" target="_blank">joseluistorrehernandez@gmail.com</a>></span> escribió:<div>
<div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Marta:<div><br></div><div>Muéstrame un ejemplo de la salida del programa KLEE y te comentaré cómo puedes leerlo desde tu programa.</div>

<div><br></div><div>Saludos</div><div>José Luis</div><div><br><br><div class="gmail_quote">
El 24 de octubre de 2012 22:26, marta vic <span dir="ltr"><<a href="mailto:marvicekl@gmail.com" target="_blank">marvicekl@gmail.com</a>></span> escribió:<div><div><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Muchisimas gracias por las respuestas<br><br>La cuestion es que yo recibo ese valor de otro programa y lo tengo que introducir en un programa c para inicializar la estructura, <div>el programa (KLEE) me da directamente esa informacion y la estructura siempre sera la adecuada, pro qeu es la misma estructura que klee ha analizado y me ha dado ese valor hexadecimal. </div>



<div><br></div><div>por lo tanto necesito una forma de re introducir el valor en la estructura y no creo que con memset pueda hacerlo (aunque voy a mirar si tengo alguna alternativa)</div><div><br></div><div>Los valores de la salida seran distintos a 0, ya que lo que hace klee es generar valores para las estructuras pero no es capaz de separarlos por campos de ahi el problema </div>



<div><br></div><div>muchisimas gracias</div><div>mirare la documentacion  que me aconsejas</div><div><br></div><div>Un saludo</div><div><div class="gmail_quote">El 8 de octubre de 2012 12:03, Salvador Pozo <span dir="ltr"><<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a>></span> escribió:<div>


<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">El pasado 2012-10-07 22:10:00, marta vic escribió:<br>
<br>
mv> Hola<br>
mv> Tengo una duda, y busco mas lugares donde pueda acceder a explicaciones o<br>
mv> documentacion que una explicacion concreta,<br>
mv> me gustaria definir los problemas que se pueden encontrar al intentar<br>
mv> ejecutar un codigo como este:<br>
mv> memcpy(&estructura1,"\x00\x00\x00\x00\x00\x00\x00\x00",8);<br>
mv> en este caso<br>
mv> estructura1{<br>
mv>     int a;<br>
mv>     int b;<br>
mv> }<br>
<br>
Hola:<br>
<br>
Antes de ver qué problemas puede haber en este mecanismo, comentar que existen soluciones mejores para hacer lo que se pretende.<br>
<br>
En la misma biblioteca que memcpy existe otra función, memset, que está diseñada específicamente para esa tarea.<br>
<br>
En tu caso concreto, podría usarse de este modo:<br>
<br>
----8<------<br>
struct {<br>
    int a;<br>
    int b;<br>
} estructura1;<br>
<br>
memset(&estructura1,0,sizeof(structura1));<br>
----8<------<br>
<br>
Esto tiene algunas ventajas evidentes:<br>
1) No necesitas una cadena de ceros de longitud arbitraria, ya que usamos un único valor de tipo int, que se usará como un byte (un unsigned char).<br>
2) No tenemos que usar una constante como tamaño de la estructura, en su lugar usamos en operador sizeof, que nos da el tamaño exacto de la estructura, independientemente de la arquitectura y de la alineación de bytes usada.<br>




<br>
Respondiendo a tu pregunta, ahora no puedo decirte un lugar donde puedas encontrar información sobre ese tema, sobre todo, porque no sé si existe algo tan concreto.<br>
<br>
Los problemas son, entre otros, los que ha indicado José Luis:<br>
<br>
- Dependiendo de la plataforma y del compilador, los valores enteros pueden tener distintos tamaños. En general, el tamaño de una estructura estará determinado por el tamaño de cada uno de sus componentes, y en C ese tamaño no está definido, salvo que el de int es mayor o igual que char, y el de long int mayor o igual que int. (<a href="http://c.conclase.net/curso/index.php?cap=002#inicio" target="_blank">http://c.conclase.net/curso/index.php?cap=002#inicio</a>)<br>




<br>
- Otro problema es el de alineación de las variables en memoria. A menudo, para mejorar la eficacia de los procesadores a la hora de acceder a memoria, las direcciones de las variables pueden ser múltiplos de 2, de 4 o de 8, dependiendo del tamaño de la palabra del microprocesador.<br>




(<a href="http://c.conclase.net/curso/index.php?cap=011b#inicio" target="_blank">http://c.conclase.net/curso/index.php?cap=011b#inicio</a>)<br>
<br>
Por ejemplo, en esta estructura:<br>
struct A {<br>
   int x;<br>
   char a;<br>
   int y;<br>
   char b;<br>
};<br>
<br>
Si el alineamiento es de cuatro bytes, las posiciones de memoria de cada elemento del array no serán consecutivas:<br>
0-3: x<br>
4: a<br>
5-7: libre<br>
8-11: y<br>
12: b<br>
13-15: libre<br>
<br>
De este modo, una estructura que debería ocupar 10 bytes, en realidad ocupa 16.<br>
<br>
Es más, el tamaño final puede depender del orden en que se declaran los elementos de la estructura, y de si se activa o no el alineamiento de bytes.<br>
<br>
- El problema con el formato Big Endian o Little Endian, en el caso concreto de inicializar con ceros, no tiene importancia. Otro tema sería si los valores iniciales no fueran nulos.<br>
<br>
- Por último, los problemas son casi iguales si se trata de arrays o estructuras. En los dos casos nos afecta la arquitectura y el problema del alineamiento de bytes.<br>
<br>
En cuanto a soluciones, arriba te he comentado la que se suele usar en C, que consiste en utilizar la función memset.<br>
<br>
En C++ es preferible usar constructores, al menos en el caso de estructuras, ya que para los arrays puede interesar más usar memset también.<br>
<br>
En general, no es buena idea que el programador haga las cuentas si puede hacer que las haga el compilador. Para hacer las cuentas a mano, como en tu ejemplo, debemos asumir el tamaño de las variables y cierta alineación, pero eso hace que el programa no sea transportable, y no podemos garantizar que funcione correctamente si se compila en otra plataforma, con otro sistema operativo o con otro compilador.<br>




<br>
Seguramente encuentres documentación en la red haciendo consultas con:<br>
memcpy gibendian<br>
memcpy alineamiento bytes<br>
memcpy plataformas<br>
<br>
Suerte, y hasta pronto.<br>
<span><font color="#888888"><br>
--<br>
Salvador Pozo (Administrador)<br>
mailto:<a href="mailto:salvador@conclase.net" target="_blank">salvador@conclase.net</a><br>
</font></span><div><div>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div></div></div><br><br clear="all"><div><div>
<br></div>-- <br><div>José Luis Torre</div>

<div><a href="http://ww.ehu.es/" target="_blank">ww.ehu.es</a></div>
<div> </div><br>
</div></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>José Luis Torre</div>

<div><a href="http://ww.ehu.es/" target="_blank">ww.ehu.es</a></div>
<div> </div><br>
</div>