2017-07-28 3 views
1

Je suis plus intéressé par l'extraction de la version de l'architecture, c'est-à-dire v5, v5T, etc .. J'ai référencé Elf for the ARM Architecture Section 4.3.6 Build Attributes qui a été utile pour me mettre au courant. Je peux trouver le début de la section .ARM.attributes et peut analyser les premières parties clés de l'information: Format-version, Section-length, et vendeur-nom + octet nul, pas de problème. Je me perds un peu après ça. Voici un instantané que j'ai exécuté en utilisant hexdump -vC sur un elf compilé avec arm-linux-gnueabi-gcc -march=armv5t -O myprog.c -o myprog pour une architecture ARMv5T. Le début de la section est 77f0b.Comment puis-je interpréter les données dans .ARM.attributes dans un ELF pour obtenir la version de l'architecture et d'autres attributs?

enter image description here

Nous pouvons voir: Format version: A

Section longueur: 0x29

Fournisseur nom: "aeabi"

De toute évidence, 5T est disponible en ASCII former à 77f1C, mais je ne sais pas comment interpréter l'étiquette que j'ai besoin d'analyser pour obtenir cette valeur.

Note: Oui, je comprends qu'il y a des outils que je peux utiliser pour ce faire, mais j'ai besoin d'extraire l'information dans l'application que j'écris. Il analyse déjà les informations nécessaires pour le rendre aussi loin.

Question supplémentaire: Est-ce que PowerPC a des étiquettes similaires? Je n'ai trouvé aucune documentation à l'appui.

Répondre

1

Ces étiquettes sont documentées dans Addenda to, and Errata in, the ABI for the ARM Architecture (note: le lien peut aller vers une version périmée). Par exemple, dans la section 2.3.5.2 (Les attributs liés à la cible), nous apprenons que Tag_CPU_arch a la valeur 6, qui suit immédiatement Tag_CPU_name (5, précédant le 5T) dans votre sauvegarde. Son argument est 3, ce qui correspond encore à ARM v5T, selon le tableau dans le document. La balise suivante est Tag_ARM_ISA_use (8) avec un argument de 1, ce qui signifie L'utilisateur voulait que cette entité puisse utiliser les instructions ARM (quel que soit ce que cela signifie), et ainsi de suite.

Notez que les entiers sont codés au format uleb128, bien que cela ne soit pas apparent ici. Ce codage est décrit dans le DWARF standard (section 7.6 de DWARF 3). Fondamentalement, c'est la base-128, petit boutiste, et vous devez continuer à lire pendant que le MSB est défini.