Простой способ конвертировать код C в сборку x86? - PullRequest
19 голосов
/ 25 апреля 2010

Есть ли простой способ (например, бесплатная программа), который может конвертировать код c / c ++ в сборку x86?

Я знаю, что любой компилятор c делает что-то очень похожее, и что я могу просто скомпилировать код c, а затем разобрать скомпилированный исполняемый файл, но это своего рода излишество, все, что я хочу, - это преобразовать несколько строк кода.

Кто-нибудь знает какую-нибудь программу, которая может это сделать?

РЕДАКТИРОВАТЬ: Я знаю, что компилятор GCC делает это, но это синтаксис AT & T, и я ищу синтаксис Intel (не уверен, называется ли он синтаксисом Intel или нет). Синтаксис AT & T выглядит для меня немного бессмысленно, и некоторые команды используют операнды в обратном порядке, а не то, как я привык, и это может привести к путанице.

Ответы [ 9 ]

45 голосов
/ 26 апреля 2010

GCC может выводить синтаксическую сборку Intel с помощью следующей командной строки:

gcc -S input.c -o output.asm -masm=intel
13 голосов
/ 25 апреля 2010

gcc сгенерирует сборку, если вы передадите ей параметр -S в командной строке.

Microsoft Visual C ++ сделает то же самое с параметром /FAs.

13 голосов

Gcc может сделать это с ключом -S, но это будет отвратительно некрасиво в синтаксисе & t.

7 голосов
/ 25 апреля 2010

Компилятор lcc является многоплатформенным кросс-компилятором. Вы можете получить его для создания синтаксического кода Intel, набрав

lcc -S -Wf-target=x86/win32 foo.c

Я считаю, что ассемблерный код из lcc значительно легче читать, чем тот, который gcc выдает сейчас.

3 голосов
/ 25 апреля 2010

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

Для GCC добавьте флаг -S.

gcc -S x.c
cat x.s

Редактировать: Если ваша программа довольно короткая, вы можете воспользоваться онлайн-сервисом по номеру https://gcc.godbolt.org/.

1 голос
/ 25 апреля 2010

если вы используете gcc в качестве компилятора, вы можете скомпилировать с опцией -S для создания кода сборки. см http://www.delorie.com/djgpp/v2faq/faq8_20.html

0 голосов
/ 22 мая 2010

уведомление каждая архитектура имеет свои уникальные имена и даже строит по-разному теперь, когда вы знаете, какие стеки используют asm volatile б идеальное решение

0 голосов
/ 26 апреля 2010

В VC ++ для вывода кода сборки может использоваться следующая команда.

кл / ов а.с

0 голосов
/ 26 апреля 2010

Как многие люди отмечают, большинство компиляторов сделают это. Если вам не нравится синтаксис, немного работы с awk или sed можно будет перевести. Или я был бы удивлен, если бы не было программы, которая сделала бы это для вас, где-то уже написана.

...