Par Wilfrid et Michel
Présentation des Binutils
Les binutils sont une collection d'outils de programmation
développés sous licence libre (Projet GNU) pour
la manipulation du code d'objet dans divers formats de fichier. Ils sont
typiquement employés avec GCC et GDB.
A l'origine, la collection binutils était composée
seulement de petits utilitaires, mais plus tard l'assembleur de GNU
(GAS) et l'éditeur de liens de GNU (GLD) ont été
inclus dans le package, puisque leurs fonctionnalités sont
étroitement liées. La plupart des binutils sont des
programmes plutôt simples. La majeure partie de la
complexité est encapsulée dans les bibliothèques
de BFD et de libopcodes qu'elles partagent.
Le contenu du package est le suivant :
Programmes installés: addr2line, ar, as, c++filt, gprof, ld,
nm, objcopy, objdump, ranlib, readelf, size, strings et strip
Bibliothèques installées : libiberty.a, libbfd.[a,so] et libopcodes.[a,so]
Voici une courte description des programmes :
- addr2line : traduit les adresses de programme en noms de fichier et numéros de ligne. Suivant une adresse et le nom d'un exécutable, il utilise les informations de déboguage disponibles dans l'exécutable pour trouver le fichier source et le numéro de ligne associés à cette adresse.
- ar : crée, modifie et extrait des archives. Une archive est un simple fichier contenant une collection d'autres fichiers dans une structure qui rend possible la récupération des fichiers originaux individuels (aussi appelés membres de l'archive).
- as : est un assembleur. Il assemble la sortie de GCC en fichiers objet.
- c++filt : est utilisé par l'éditeur de liens pour récupérer les symboles C++ et Java, pour empêcher les fonctions surchargées d'arrêter brutalement le programme.
- gprof : affiche les données de profilage d'appels dans un graphe.
- ld : est un éditeur de liens. Il combine un certain nombre d'objets et de fichiers archives dans un seul fichier, en déplaçant leurs données et en regroupant les références de symboles.
- nm : liste les symboles disponibles dans un fichier objet.
- objcopy : est utilisé pour traduire un type de fichier objet en un autre type.
- objdump : affiche des informations sur le fichier objet donné, les options contrôlant les informations à afficher. L'information affichée est surtout utile aux programmeurs qui travaillent sur les outils de compilation.
- ranlib : génère un index du contenu d'une archive et le stocke dans l'archive. L'index liste tous les symboles définis par les membres de l'archive qui sont des fichiers objet déplaçables.
- readelf : affiche des informations sur les binaires de type elf.
- size : liste les tailles de section et le total pour les fichiers objets donnés.
- strings : affiche, pour chaque fichier donné, la séquence de caractères affichables qui sont d'au moins la taille spécifiée (par défaut, 4). Pour les fichiers objets, il affiche, par défaut, seulement les chaînes des sections d'initialisation et de chargement. Pour les autres types de fichiers, il parcourt le fichier entier.
- strip : supprime les symboles des fichiers objets.
Afin de fournir les binutils de SIMPLE-CPU, il faut
donc les modifier par l'intermédiaire des fichiers opcode.
Ces fichiers seront décrits ultérieurement.
Après avoir brièvement analyser les fichiers de
la cible de comparaison (à savoir le Fujitsu FR30), nous constatons
qu'ils portent tous l'entête d'un programme CGEN. Ce dernier
semble les avoir généré
automatiquement. Nous orientons donc notre recherche vers CGEN et ces différents
fichiers.