Non sono in grado di capire come i byte in memoria vengano mappati in una struttura. La mia macchina è un little-endian x86_64. Il codice è stato compilato con gcc 4.7.0 dalla distribuzione mingw32-64 Win64 per Win64.
Questi sono i contenuti del frammento di memoria rilevante:
... 450002cf9fe5000040115a9fc0a8fe ...
E questa è la definizione della struct:
typedef struct ip4 {
unsigned int ihl :4;
unsigned int version :4;
uint8_t tos;
uint16_t tot_len;
uint16_t id;
uint16_t frag_off; // flags=3 bits, offset=13 bits
uint8_t ttl;
uint8_t protocol;
uint16_t check;
uint32_t saddr;
uint32_t daddr;
/*The options start here. */
} ip4_t;
Quando un puntatore a una tale struttura (lascia che sia *ip4
) viene inizializzato sull'indirizzo iniziale della regione di memoria incollata sopra, questo è ciò che il debugger mostra per i campi della struct:
ip4: address=0x8da36ce
ip4->ihl: address=0x8da36ce, value=0x5
ip4->version: address=0x8da36ce, value=0x4
ip4->tos: address=0x8da36d2, value=0x9f
ip4->tot_len: address=0x8da36d4, value=0x0
...
Vedo come sono mappati ihl
e versione: 4 byte per un intero lungo, little-endian. Ma non capisco come siano mappati tos
e tot_len
; quali byte in memoria corrispondono a ciascuno di essi.
Grazie in anticipo.