J’étais en train de travailler sur le format des fichiers VHD à partir de la documentation publique, lorsque je suis tombé sur un détail amusant : les nombres dans ce format sont stockés en big-endian. C’est à dire en commençant par le poids fort… C’est à dire qu’un nombre de 4 octets valant 0x12345678 est stocké de cette manière : 12 34 56 78. Alors que sur les plateformes Intel on a plutôt l’habitude de la notation little-endian, c’est à dire 78 56 34 12.

Cette singularité m’est apparue lorsque j’ai décodé la daté de création d’un VHD quelque part en 2011… Une inversion des octets m’a vite donné le bon résultat en 2009.

image

Ci-dessus, la date de création du VHD est à l’offset 0x0018, en nombre de secondes depuis le 1/1/2000 0:00 GMT. Je vous laisse faire le calcul (merci Excel) :-).

Après vérification, il s’avère que c’est précisé dans la documentation :

All values in the file format, unless otherwise specified, are stored in network byte order (big endian).

Je suppose que la raison de cela est que Connectix, à qui Microsoft a acheté la technologie Virtual PC et Virtual Server en 2003, a commencé par des produits sur Mac, sans doute sur processeur PowerPC.

Etonnant non ?