Как вы получаете вывод на ассемблере из источника C / C ++ в gcc? - PullRequest
321 голосов
/ 26 сентября 2008

Как это сделать?

Если я хочу проанализировать, как что-то компилируется, как бы я получил испущенный код сборки?

Ответы [ 16 ]

5 голосов
/ 24 января 2018

Я не вижу такой возможности среди ответов, возможно, потому что вопрос с 2008 года, но в 2018 году вы можете использовать онлайн-сайт Мэтта Голдболта https://godbolt.org

Вы также можете локально git clone и запустить его проект https://github.com/mattgodbolt/compiler-explorer

4 голосов
/ 04 января 2011

От: http://www.delorie.com/djgpp/v2faq/faq8_20.html

gcc -c -g -Wa, -a, -ad [другие опции GCC] foo.c> foo.lst

в качестве альтернативы ответу PhirePhly Или просто используйте -S, как все говорили.

2 голосов
/ 25 февраля 2018

Output of these commnads

Вот шаги, чтобы увидеть / распечатать код сборки любой программы на C на вашем Windows

консоль / терминал / командная строка:

  1. Напишите программу на C в редакторе кода C, например, кодовые блоки, и сохраните ее с расширением .c

  2. Скомпилируйте и запустите.

  3. После успешного запуска перейдите в папку, в которую вы установили компилятор gcc, и введите

    следующая команда для получения файла .s файла .c

    C: \ gcc> gcc -S полный путь к файлу C ENTER

    Пример команды (как в моем случае)

    C: \ gcc> gcc -S D: \ Aa_C_Certified \ alternate_letters.c

    Выводит файл «.s» исходного файла «.c»

4. После этого введите следующую команду

C; \ gcc> cpp filename.s ENTER

Пример команды (как в моем случае)

C; \ gcc> cpp alternate_letters.s

Это напечатает / выведет весь код языка ассемблера вашей программы на Си.

1 голос
/ 28 ноября 2018

недавно я хотел знать сборку каждой функции в программе
Вот как я это сделал.

$ gcc main.c                      // main.c source file
$ gdb a.exe                       // gdb a.out in linux
  (gdb) disass main               // note here main is a function
                                  // similary it can be done for other functions
1 голос
/ 16 декабря 2010

Используйте «-S» в качестве опции. Отображает вывод сборки в терминале.

0 голосов
/ 26 декабря 2018

Вот решение для C с использованием gcc:

gcc -S program.c && gcc program.c -o output
  1. Здесь первая часть хранит вывод сборки программы в том же имени файла, что и Программа, но с измененным расширением .s , вы можете открыть его как любой обычный текстовый файл. *

  2. Вторая часть здесь компилирует вашу программу для фактического использования и генерирует исполняемый файл для вашей Программы с указанным именем файла.

program.c , используемый выше - это имя вашей программы, а output - это имя исполняемого файла, который вы хотите сгенерировать.

Кстати, это мой первый пост на StackOverFlow: -}

...