mardi 8 janvier 2008

"Magic number" dans les quatre premiers octets des fichiers au format Mach-O

Le format d'exécutable sous Mac OS X est le format Mach-O.

Ce format a un certain nombre d'avantages, notamment la possibilité d'avoir des "fat binaries", appelées "Universal Binaries" par Apple, d'ailleurs je vous en avais déjà parlé ici et ici.

La commande otool -h permet d'analyser le header d'un fichier au format Mach-O. Voyons le résultat sur un fichier Mach-O bien connu (/bin/ls), et un autre fichier Mach-O que j'ai compilé moi-même:
[pierre@albert] /Users/pierre>otool -h /bin/ls
/bin/ls:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedface 7 3 0x00 2 14 1304 0x00000085
[pierre@albert] /Users/pierre>otool -h Documents/source/hello
Documents/source/hello:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
0xfeedface 7 3 0x00 2 11 936 0x00000085
Il est amusant de constater que le "magic number" dans le header est 0xfeedface.
En fait les quatre premiers octets de tout fichier au format Mach-O sont toujours 0xfeedface ou 0xcefaedfe si vous lisez un fichier petit-boutiste (little-endian) sur une machine grand-boutiste (big-endian), ou l'inverse...

Vous pouvez aussi consulter cette documentation officielle Apple sur la structure des exécutables Mach-O.

Aucun commentaire: