Exploration de l’Apple M1 pour la programmation en langage d’assemblage
La semaine dernière, nous avons abordé l’utilisation du nouveau Macintosh basé sur Apple M1 comme station de travail de développement. L’installation de Xcode d’Apple a également permis de mettre en place un grand nombre d’outils de développement open source, y compris LLVM et make. Cette fois, nous explorons comment compiler et exécuter un simple programme en langage d’assemblage ARM qui affiche « Hello World » en ligne de commande.
Compatibilité et particularités entre MacOS et Linux
Bien que MacOS et Linux soient tous deux dérivés d’Unix et partagent de nombreuses similarités, il existe des différences notables. Le compilateur par défaut sous MacOS est LLVM, tandis que Linux utilise principalement GNU GCC. Une particularité de MacOS est que l’adresse de début des programmes doit être alignée sur une frontière de 64 bits, illustrée par la directive « .align 2 » dans les sources.
Pour la compilation sous MacOS, il est essentiel de lier explicitement la bibliothèque système, même en l’absence d’appel système direct, pour éviter des erreurs de lien. Une différence majeure réside dans le point d’entrée par défaut : « _main » pour MacOS contre « _start » pour Linux, modifiable via un argument de ligne de commande pour l’éditeur de liens.
Pour illustrer cela, prenons l’analogie de deux cuisines équipées différemment. Bien que le processus pour préparer un plat (compiler un programme, en l’occurrence) soit similaire, les outils et configurations spécifiques (compilateurs et directives de compilation) influencent la manière dont la tâche est accomplie.
En termes de conseils de sécurité liés à la programmation sur ces systèmes, il est crucial d’assurer que les environnements de développement sont à jour pour se prémunir contre les vulnérabilités potentielles pouvant être exploitées via des outils obsolètes ou mal configurés. La cybersécurité commence avec les fondations de l’environnement de développement, donc garder votre système et vos outils à jour est essentiel.
