Outil pour analyser la taille de l'ELFE sections et le symbole
J'ai besoin d'un moyen d'analyser le fichier de sortie de mon compilateur GCC pour les BRAS. Je suis de la compilation de métal nu et je suis très préoccupé par la taille. Je peux utiliser arm-none-eabi-objdump
fournis par le cross-compilateur, mais l'analyse de la sortie n'est pas quelque chose que je serais désireux de faire si il existe un outil pour cette tâche. Connaissez-vous d'un outil existant? Ma recherche s'est avéré pas de résultats.
Une chose de plus, chaque fonction dans mon code est dans sa propre section.
Qu'essayez-vous de faire? Quelles sont les informations que vous souhaitez récupérer?
OriginalL'auteur RushPL | 2012-07-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
nm
etsize
pour obtenir la taille de fonctions et ELF sections.Pour obtenir la taille des fonctions (et des objets statiques durée de stockage):
La deuxième colonne indique la taille en décimal de la fonction et des objets.
Pour obtenir la taille des sections:
La deuxième colonne indique la taille en décimal des sections.
nm
, n'est-ce pas que Windows? Si oui, désolé, je n'ai pas dis que je suis à l'utilisation de Linux.Windows? Non,
nm
etsize
sont les outils GNU partie et sont une partie de labinutils
. Ajouter la plate-forme de préfixe pour exécuter les outils d'une croix-plate-forme (par exemple, typearm-none-eabi-nm
etarm-none-eabi-size
),Fait intéressant, il dispose également de la taille de l'effet de la suppression de BRAS Mappage de Symboles. Ces symboles sont imprimés sans une taille de champ (c'est à dire le champ est manquant, ne pas imprimer à zéro), et ils sont supprimés lorsque
nm
est utilisé avec--size-sort
.OriginalL'auteur ouah
La readelf utilitaire est très pratique pour afficher une variété d'informations sur la section, y compris la taille des sections, par exemple:
Si vous êtes intéressé dans le temps de la mémoire, vous pouvez ignorer les sections qui n'ont pas le " A " (allouer) indicateur défini.
arm-none-eabi-readelf -s build/program.out|perl -ne 'if(/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/) { print $3 . " " . $8. "\n";}'|sort -n
Merci, le ci-dessus a fait l'affaire pour moi! Je ne savais pas à propos de la readelf.
OriginalL'auteur Lance Richardson