2 votes

Générer du code assembleur à partir d'un fichier C sous linux

Je voudrais savoir comment générer du code assembleur à partir d'un programme C sous Unix. J'ai essayé le gcc : gcc -c file.c

J'ai aussi utilisé en premier lieu cpp et ensuite essayer as mais je reçois des erreurs.

J'essaie de construire un programme assembleur à partir de 3 programmes différents

prog1.c prog2.c prog.h

Est-il correct de faire gcc -S prog1.c prog2.c prog.h ? Il semble que ce ne soit pas correct. Je ne sais pas si je dois générer l'assembleur à partir de chacun d'eux et ensuite les relier

Gracias

10voto

Dirk Eddelbuettel Points 134700

Selon le manuel :

`-S'
     Stop after the stage of compilation proper; do not assemble.  The
     output is in the form of an assembler code file for each
     non-assembler input file specified.

     By default, the assembler file name for a source file is made by
     replacing the suffix `.c', `.i', etc., with `.s'.

     Input files that don't require compilation are ignored.

alors essayez gcc -S file.c .

5voto

Tim Points 4953

En man gcc :

   -S     Stop  after the stage of compilation proper; do not
          assemble.  The output is an assembler code file for
          each non-assembler input file specified.

          By default, GCC makes the assembler file name for a
          source file by replacing  the  suffix  `.c',  `.i',
          etc., with `.s'.  Use -o to select another name.

          GCC ignores any input files that don't require com-
          pilation.

5voto

Remo.D Points 9841

Si vous utilisez gcc (comme cela semble être le cas), c'est gcc -S.

N'oubliez pas de spécifier les chemins d'inclusion avec -I si nécessaire.

gcc -I ../my_includes -S my_file.c

et vous obtiendrez mon_fichier.s avec les instructions de l'Assembleur.

2voto

Peeter Joot Points 1975

Objdump -d fonctionne aussi très bien, et vous donnera la liste des assemblages pour l'ensemble du binaire (exe ou shared lib).

Cela peut être beaucoup plus clair que d'utiliser l'asm généré par le compilateur, car les appels aux fonctions dans le même fichier source peuvent apparaître sans avoir été résolus à leur emplacement final.

Construisez votre code avec -g et vous pouvez également ajouter --line et/ou --source aux drapeaux objdump.

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