Генерация ассемблерного кода из файла C в Linux - PullRequest
2 голосов
/ 16 ноября 2009

Я хотел бы знать, как генерировать код на ассемблере из C-программы с использованием Unix. Я попробовал GCC: gcc -c file.c

Я также сначала использовал cpp, а затем попробуйте as, но я получаю ошибки.

Я пытаюсь собрать программу на ассемблере из 3 разных программ

prog1.c prog2.c prog.h

Правильно ли сделать gcc -S prog1.c prog2.c prog.h? Кажется, это не правильно. Я не знаю, должен ли я генерировать ассемблер из каждого из них, а затем связать их

Спасибо

Ответы [ 4 ]

9 голосов
/ 16 ноября 2009

Согласно инструкции:

`-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.

так что попробуйте gcc -S file.c.

5 голосов
/ 16 ноября 2009

Если вы используете gcc (как кажется), это gcc -S.

Не забудьте указать пути включения с -I, если необходимо.вы получите my_file.s с инструкциями ассемблера.

5 голосов
/ 16 ноября 2009

С 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.
2 голосов
/ 16 ноября 2009

objdump -d также работает очень хорошо и предоставит вам список сборок для всего двоичного файла (exe или совместно используемая библиотека).

Это может быть намного понятнее, чем использование asm, сгенерированного компилятором, поскольку вызовы функций в одном и том же исходном файле могут отображаться, пока не решенные в их окончательное местоположение.

Создайте свой код с помощью -g, и вы также можете добавить --line и / или --source к флагам objdump.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...