157 votes

Comment dois-je apprendre l'assemblage ARM ?

J'ai l'intention d'apprendre l'assemblage ARM. Comment dois-je m'y prendre pour m'y préparer ?

88voto

Nils Pipenbrinck Points 41006

L'assembleur ARM est très facile à apprendre grâce à ses opcodes à trois opérandes très flexibles. Après le MIPS, c'est le dialecte assembleur le plus simple qui existe. Si vous connaissez un dialecte d'assembleur, vous pouvez devenir un programmeur ARM-assembleur courant en un week-end.

Il existe cependant quelques ressources en ligne :

Introduction générale à l'architecture :

http://www.heyrick.co.uk/assembler/

Un site web avec un forum de discussion sur le développement de PC de poche (xscale). Si vous le parcourez, vous trouverez des joyaux d'assemblage ARM très intéressants :

http://www.pocketmatrix.com

Et puis il y a le tableau de référence rapide du jeu d'instructions ARM qui résume toutes les instructions de toutes les architectures :

http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf

(Indice : il existe une demi-douzaine d'architectures ARM. Choisissez la charte de référence pour l'architecture sur laquelle vous travaillez. Par exemple, si vous écrivez pour ARM9, vous pouvez ignorer toutes les instructions Thumb2 et ARMv6).

Pour obtenir des exemples de codes, il existe également des ressources.

  1. BRICOLAGE : Compiler un morceau de code C et analyser le désassemblage.

  2. Les sites Web de Homebrew pour Game Boy Advance contiennent beaucoup de matériel.

  3. Acorn Archimedes Nostalgie Les sites Web ont souvent de beaux extraits de code assembleur.

76voto

dwelch Points 27195

Hmmm, ma réponse est d'un angle totalement différent.

Vous aurez besoin de l'ARM ARM (The ARM Architecture Reference Manual). Vous pouvez obtenir un livre payant en version imprimée mais le pdf est disponible gratuitement. Cela varie d'un endroit à l'autre, il fut un temps où vous demandiez le CD gratuit du manuel de référence technique de l'ARM et une semaine plus tard, il arrivait par la poste (du Royaume-Uni) avec de nombreux pdf, aujourd'hui vous pouvez probablement vous inscrire sur leur site et le télécharger. Les TRM (manuels de référence technique) sont également bons mais ne contiennent pas toujours les instructions. Le livre bleu (version imprimée du bras avec une couverture bleue) est l'un des meilleurs manuels imprimés à avoir comme référence, mais il ne contient pas les nouvelles instructions qui sont sorties depuis l'ARM 7.

La prochaine chose à faire est d'obtenir un compilateur croisé arm, de nos jours c'est facile, devkitadvance, winarm, code sourcery, emdebian (juste les binaires de la boîte à outils) (ceux-ci sont tous basés sur gcc), ou de rouler votre propre (c'est facile, presque trivial une fois que quelqu'un vous montre comment). En fait, binutils est tout ce dont vous avez besoin pour cela, pas un gcc complet.

mkdir /arm
cd /arm
tar xzvf /path/to/binutils-version.tar.gz
cd binutils-version
mkdir build
cd build
../configure --target=arm-thumb-elf --prefix=/arm
make all install
PATH=/arm/bin:$PATH

et vous avez votre propre assembleur arm fait maison (et linker, etc, binutils).

Écrivez un programme terriblement simple :

.globl _start
_start:

  mov r0,#1
  mov r1,r0
  str r1,[r2]

l'assembler :

arm-itvaries-as -o hello.o hello.s

Faites le lien :

arm-itvaries-ld -o hello.elf hello.o

le démonter :

arm-itvaries-objdump -D hello.elf > hello.list

le sauvegarder dans un fichier binaire facile à lire :

arm-itvaries-objcopy -O binary hello.elf hello.bin

Maintenant, commencez à écrire votre propre désassembleur. Les instructions de l'arm sont toutes de 32 bits, chaque bit est défini dans l'ARM ARM. Oui, chaque révision du livre comporte des bogues, mais vous vous en rendrez vite compte et vous en serez plus sage. Ne vous laissez pas tromper par des commentaires comme "des résultats imprévisibles vont se produire", ce sont juste des protections de brevets pour leur propriété intellectuelle, la plupart sont prévisibles, certains sont juste cassés sur ce noyau mais pas sur ce noyau.

Voici ce que vous allez vouloir faire, écrire des programmes douloureusement simples comme celui ci-dessus pour créer chaque et chaque variation de chaque instruction possible (comme décrit dans le bras arm). Faites-le à la fois pour développer et déboguer votre désassembleur et pour apprendre le jeu d'instructions. Notez que votre désassembleur est un outil d'apprentissage, vous n'essayez pas de créer un code assemblable ou même une jolie sortie, il doit seulement être assez lisible pour voir que vous avez en fait compris ce que fait ce champ dans l'opcode et comment écrire le source assembleur pour manipuler ces bits d'opcode.

Faites de même pour le jeu d'instructions ARM, qui n'est pas aussi facile que celui du thumb, mais toutes les instructions sont de taille fixe et alignées sur les limites des mots, de sorte que vous pouvez commencer au début du fichier .bin et travailler jusqu'à la fin, en désassemblant les instructions et les données et tout ce que vous trouvez. Ensuite, passez au jeu d'instructions thumb, enfin, vous pouvez essayer thumb 2 mais le désassemblage à longueur variable est une forme d'art en soi que vous ne voulez PAS aborder sans expérience, et le but ici n'est pas de vous tuer à apprendre l'art du désassemblage mais d'apprendre un jeu d'instructions. Limitez vos programmes à quelques lignes pour que le désassemblage reste gérable.

Cet exercice complet vous apprendra le jeu d'instructions mieux que n'importe quel livre et vous connaîtrez ce jeu d'instructions mieux que les personnes qui n'ont pas procédé de cette façon, peu importe le nombre d'années d'assembleur sur le jeu d'instructions spécifique. Je l'ai fait maintes et maintes fois avec chaque ISA que j'ai rencontré, à la deuxième ou troisième, vous pouvez avoir le désassembleur fait en quelques soirées et avoir le jeu d'instructions battu en soumission.

L'ARM est littéralement en train de conquérir le monde et c'est pour cette raison qu'il s'agit du meilleur ensemble d'instructions à apprendre. Il s'agit donc du meilleur ensemble d'instructions à apprendre pour cette raison. C'est aussi un très bon ensemble, avec quelques forces et faiblesses, mais dans l'ensemble bien équilibré. Grâce à cet exercice, je gagne plutôt bien ma vie en tant que "The ARM guy", vous pouvez aussi le faire...

23voto

Shervin Emami Points 1505

Ce post est vieux mais quand même : Il existe une très bonne introduction à l'assemblage ARM à l'adresse suivante http://www.coranac.com/tonc/text/asm.htm

Je l'ai utilisé pour apprendre l'assemblage de l'iPhone 3GS (ARM Cortex-A8).

18voto

David Thomas Points 583

Voici un lien vers le mien Introduction à l'ARM cours :

http://www.davespace.co.uk/arm/introduction-to-arm/index.html

14voto

Michael Burr Points 181287

Il n'est pas bon marché, mais j'ai trouvé que le "ARM System Developer's Guide" par Andrew Sloss, et al est un très bon livre pour l'assemblage ARM :

http://www.amazon.com/dp/1558608745

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X