Tamaño en bits UBYTE:4 ¿ y Tema: Como leo estos Bits de derecha a izquierda o izquierda a derecha ?

Iniciado por FFernandez, 7 Octubre 2021, 21:08 PM

0 Miembros y 1 Visitante están viendo este tema.

FFernandez

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


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

FFernandez

#2
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.

Eternal Idol

#3
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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón