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
3 bits.
https://en.cppreference.com/w/c/language/bit_field
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.
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.