Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: FFernandez en 7 Octubre 2021, 21:08 pm



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.