Título: Tamaño en bits UBYTE:4 ¿ y Tema: Como leo estos Bits de derecha a izquierda o izquierda a derecha ? Publicado por: FFernandez en 7 Octubre 2021, 21:08 pm struct UNWIND_CODE
Size Value UBYTE Offset in prolog UBYTE: 4 Unwind operation code UBYTE: 4 Operation info Tamaño en bits UBYTE:4 ¿ Tengo dudas porque me he encontrado distintas interpretaciones, gracias Esta es diferente a todas que he encontrado : Excepciones de prólogo y epílogo ****************Esta definición es la correcta, coinciden todos los parametros Dentro de una función descrita por una _RUNTIME_FUNCTIONestructura, puede ocurrir una excepción en el prólogo o el epílogo de la función, así como en el cuerpo de la función, que puede estar o no en un bloque try. El prólogo es la parte de la función que guarda registros, almacena parámetros en la pila (si - O0). El epílogo es la inversión de este proceso, es decir, el regreso de la función. El compilador almacena cada acción que tiene lugar en el prólogo en una UnwindCodesmatriz; cada acción está representada por una UNWIND_CODEestructura de 2 bytes que contiene un miembro para el desplazamiento en el prólogo (1 byte), el código de operación de desenrollado (4 bits) y la información de operación (4 bits). Y la segunda pregunta es: Los Byte(s) los estoy leyendo de derecha a izquierda, como leo entonces a estos bits, gracias. 1 byte == UBYTE: 4 Unwind operation code UBYTE: 4 Operation info Supongo que de izquierda a derecha…………………………….?¿?¿ ******************** Pues si que es correcto aquí se lee como se escribe, comprobado y coinciden los parámetros extraidos. Entonces la struct UNWIND_CODE tiene un tamaño de 2 byte en x64 Aclaro sistema x64 Título: Re: Tamaño en bits UBYTE:3 ¿ Publicado por: Eternal Idol en 7 Octubre 2021, 21:14 pm 3 bits.
https://en.cppreference.com/w/c/language/bit_field Título: Re: Tamaño en bits UBYTE:4 ¿ Publicado por: FFernandez en 7 Octubre 2021, 21:38 pm Gracias, #include <stdio.h>
struct S { // will usually occupy 8 bytes: // 5 bits: value of b1 // 27 bits: unused // 6 bits: value of b2 // 15 bits: value of b3 // 11 bits: unused unsigned b1 : 5; unsigned :0; // start a new unsigned int unsigned b2 : 6; unsigned b3 : 15; }; int main(void) { printf("%zu\n", sizeof(struct S)); // usually prints 8 } Entonces, el 99% de las interpretaciones que he visto están mal………. Por ejemplo: https://sudonull.com/post/72973-Exceptions-on-Windows-x64-How-it-works-Part-2-Company-blog-Aladdin-RD La estructura : UNWIND_CODE tiene una longitud de 2 BYTE, es correcto?, gracias ***************** Si es correcto coincide con CountOfCodes alineado Word LE FALTA FrameOffset 2 BYTES TOTAL 4 BYTES lo cambie casi a la vez tuya, el fragmento de texto que he puesto es mas aclaratorio, y tenia que adaptar el título. Hablo siempre de x64. que es la documentación que manejo. Título: Re: Tamaño en bits UBYTE:4 ¿ Publicado por: Eternal Idol en 8 Octubre 2021, 00:00 am Ahora le cambiaste el titulo al tema, era "Tamaño en bits UBYTE:3" y la respuesta es 3 bits, el tamaño del campo es de 3 bits. No, la estructura no tendra un tamaño de 2 bytes ... una estructura dependera de la plataforma (x86, x64, ARM64, etc.), el empaquetado, el alineamiento ... mejor lee el codigo generado y vas a ver que al leer o escribir en esos campos se usa exactamente el numero de bits especificado.
|