Mach-O
Mach-O (pour Mach-object) est un format de fichier exécutable, sous Apple/Darwin, alias Mac OS X.
![](../I/langfr-260px-Gnome-terminal.svg.png.webp)
Extension |
none, .o, .dylib |
---|---|
PUID | |
Signatures | |
Développé par | |
Type de format |
Structure des fichiers Mach-O
Chaque fichier Mach-O est constitué d'un entête, suivi d'une série de commandes de chargement, suivie d'un ou plusieurs segments qui contiennent jusqu'à 255 sections. Le format Mach-O utilise le format de réallocation REL pour gérer les références de symboles. Lors de la recherche de symboles, Mach-O utilise un espace de noms à deux niveaux qui encode chaque symbole dans une paire 'objet/nom du symbole' qui est ensuite recherchée linéairement, d'abord par l'objet, puis par le nom du symbole[1].
La structure basique des fichier Mach-O est constitué d'une liste de "commandes de chargment" de longueur variable qui fait référence a des pages de données autrepars dans le fichier[2], cette structure était aussi utiliser dans le format de fichier executable d'Accent, étant a son tour, basée sur une idée de Spice Lisp.
Exécutable Multi-Architecture
Plusieurs fichiers Mach-o peuvent être combiné dans un exécutable multi-achitecture, ceci permet a un seul fichier executable de contenir du code pouvant supporté plusieurs set d'instruction d'architectures. Par exemple: un executable multi-architecture pour Mac OS X peut contenir a la fois du code PowerPC 32-bit et 64-bit, ou contenir a la fois du code PowerPC 32-bit et x86, ou contenir du code PowerPC 32-bit, 64-bit, du code x86, et x86_64.
Le devenir de Mach-O
Avec l'introduction de la version 10.6 de Mac OS X (Snow Leopard), le format Mach-O a subi une importante modification, qui empêche les binaires compilés sous Mac OS X 10.6 d'être exécutés sur des versions plus anciennes du système. La différence vient de certaines commandes de chargement que l'éditeur de liens des anciennes versions de Mac OS X ne comprend pas. Autre changement significatif du format est le change de comment les tables d'édition de liens (trouvé dans la section "__LINKEDIT") fonctionne. Dans Mac OS X 10.6 ces nouvelles tables d'edition de lien sont compréssée en suppriment les bits d'information non-utilisée et inutile, Toutefois Mac OS X 10.5 et les versions precédentes ne pouvent pas lire ce nouveaux format de tables. Pour résoudre ce problème de rétro-compatiblité de l'option d'éditeur de liens "-mmacosx-version-min=" peut être utilisé.
Autre Implémentation
Certaines versions de NetBSD ont un support Mach-O ajouté entant qu'une partie d'implementation de compatibilité d'exécutable, qui permet d'executer certain exécutable Mac OS 10.3.[3],[4]
Pour Linux, un executeur de fichier Mach-O pouvant exécuter des exécutable Mac OS 10.6 a été écrit par Shinichiro Hamaji[5]. Pour une solution compléte basé sur cette exécuteur, le Project DarlingHQ vise a fournir un environement complet permettent a une application macOS de s'exécuter sur Linux.
Pour le language de programmation Ruby, la librairie "ruby-macho"[6] fournit une implémentation d'un editeur et analyser Mach-O.
Notes et références
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Mach-O » (voir la liste des auteurs).
- « OS X ABI Mach-O File Format Reference » [archive du ], Apple Inc., (consulté le )
- Avadis Tevanian, Richard F. Rashid, Michael W. Young et David B. Golub, « A Unix Interface for Shared Memory and Memory Mapped Files Under Mach », In Proceedings of the Summer 1987 USENIX Conference, , p. 53–67 (lire en ligne, consulté le )
- « Mach and Darwin binary compatiblity for NetBSD/powerpc and NetBSD/i386. », sur hcpnet.free.fr (consulté le )
- (en) Emmanuel Dreyfus, « Mac OS X binary compatibility on NetBSD: challenges and implementation », 2004.eurobsdcon.org, (lire en ligne [PDF])
- « Mach-O loader for Linux - I wrote... », sur shinh.skr.jp (consulté le )
- ruby-macho, Homebrew, (lire en ligne)
Voir aussi
Articles connexes
- Fat binaire
- Universal binary
- Xcode
Liens externes
- Portail de l’informatique