315 votes

En utilisant GCC pour produire assembly lisible ?

Je me demandais comment utiliser GCC sur mon fichier source en C pour vider une version mnémonique du code machine, ainsi je pourrais voir ce que mon code a été compilé en. Vous pouvez faire cela avec Java mais je n’ai pas pu trouver un moyen avec GCC.

Je suis en train de ré-écrire une méthode de C dans l’Assemblée et de voir comment GCC ça serait une grande aide.

395voto

Bastien Léonard Points 18404

Si vous compilez avec les symboles de débogage, vous pouvez utiliser `` pour produire un code plus lisible par machine.


Exemple :

128voto

kmm Points 1051

Je voudrais ajouter à ces réponses que si vous donnez gcc le drapeau `` , l’assembleur, il émet sera beaucoup plus clair à lire.

82voto

Andrew Keeton Points 6268
<blockquote> <p>Utiliser le-s (Remarque : S majuscule) passer à GCC, et il émettra le code assembleur dans un fichier avec un.s extension. Par exemple, la commande suivante :</p> <p><code></code></p> <p>laisse le code assembleur généré sur le fichier foo.s.</p> <p>Déchiré directement de <a href="http://www.delorie.com/djgpp/v2faq/faq8%5F20.html">http://www.delorie.com/djgpp/v2faq/faq8%5F20.html</a></p></blockquote>

54voto

amaterasu Points 380

Il serait prudent de laisser les autres savoir que le commutateur-S pour GCC sur x86 systèmes à base de produit un dump de AT&T de la syntaxe par défaut peut être spécifiée avec l'option-masm=att commutateur, de la manière suivante:

gcc -S -masm=att code.c

Tandis que si vous souhaitez produire un dump de la syntaxe intel, vous pouvez utiliser l'-masm=intel commutateur, de la manière suivante:

gcc -S -masm=intel code.c

(À la fois de produire des images de code.c dans leurs divers syntaxe dans le fichier de code.s respectivement)

Afin de produire des effets similaires avec objdump, vous voulez les utiliser je démonte-options=intel/att interrupteur, un exemple (avec le code décharges pour illustrer les différences dans la syntaxe):


 $ objdump -d --disassembler-options=att code.c
  ...
 080483c4 :
 80483c4:   8d 4c 24 04          	lea    0x4(%esp),%ecx
 80483c8:   83 e4 f0             	and    $0xfffffff0,%esp
 80483cb:   ff 71 fc             	pushl  -0x4(%ecx)
 80483ce:   55                   	push   %ebp
 80483cf:   89 e5                	mov    %esp,%ebp
 80483d1:   51                   	push   %ecx
 80483d2:   83 ec 04             	sub    $0x4,%esp
 80483d5:   c7 04 24 b0 84 04 08 	movl   $0x80484b0,(%esp)
 80483dc:   e8 13 ff ff ff       	call   80482f4 
 80483e1:   b8 00 00 00 00       	mov    $0x0,%eax
 80483e6:   83 c4 04             	add    $0x4,%esp 
 80483e9:   59                   	pop    %ecx
 80483ea:   5d                   	pop    %ebp
 80483eb:   8d 61 fc             	lea    -0x4(%ecx),%esp
 80483ee:   c3                   	ret
 80483ef:   90                   	nop

et


$ objdump -d --disassembler-options=intel code.c
  ...
 080483c4 :
 80483c4:   8d 4c 24 04          	lea    ecx,[esp+0x4]
 80483c8:   83 e4 f0             	and    esp,0xfffffff0
 80483cb:   ff 71 fc             	push   DWORD PTR [ecx-0x4]
 80483ce:   55                   	push   ebp
 80483cf:   89 e5                	mov    ebp,esp
 80483d1:   51                   	push   ecx
 80483d2:   83 ec 04             	sub    esp,0x4
 80483d5:   c7 04 24 b0 84 04 08 	mov    DWORD PTR [esp],0x80484b0
 80483dc:   e8 13 ff ff ff       	call   80482f4 
 80483e1:   b8 00 00 00 00       	mov    eax,0x0
 80483e6:   83 c4 04             	add    esp,0x4
 80483e9:   59                   	pop    ecx
 80483ea:   5d                   	pop    ebp
 80483eb:   8d 61 fc             	lea    esp,[ecx-0x4]
 80483ee:   c3                   	ret

26voto

Basile Starynkevitch Points 67055

Avez-vous essayé `` ?

Si vous voulez comprendre ce que fait essayer en passant mais soyez prudent : vous obtiendrez des centaines de fichiers de vidage.

BTW, GCC est extensible par le biais de plugins ou à faire fondre (une langue spécifique de domaine de niveau élevé d’étendre la GCC).

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