Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сгенерить ассемблерный листинг? 
:(
    Опции темы
ТарасАтавин
Дата 3.9.2013, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Как скомпилить проект не в исполняемый код, а на язык ассемблера, чтоб можно было его прочитать?


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
akizelokro
Дата 3.9.2013, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Берёшь скомпилированный файл, и читаешь через бинарный поток.
Или ты про дизассемблер, чтобы перевести в инструкции?

Это сообщение отредактировал(а) akizelokro - 3.9.2013, 07:07


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
ТарасАтавин
Дата 3.9.2013, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



В исполняемом файле все инструкции уже в опкодах, а мне бы в мнемониках. И дирректив там вроде уже нет совсем. Мне попадалось в литературе, что c/c++ иногда компилируют в два этапа: сначала на ASM, потом вручную оптимизируют, а потом уже окончательно компилируют в код. И листинги попадались. С именами не только функций, но даже переменных. Листинг на c++, рядом листинг на ASM, се имена сохранены и добавлены новые. Не очень похоже на дизасемблер. И ещё мне попадалось упоминание того, что и сам компилятор может компилировать дважды: сначала c++ в ASM, потом ASM в код. Так вот, я хочу скомпилить только первый этап и сохранить его в файл. Не для оптимизации, а для анализа. Хочу посмотреть, на что прога похожа на низком уровне. Можно, конечно, дизить. Но зачем, если есть исходник? Лучше с него. И получить файл на ASME со всеми именами сегментов, перегруженных функций, переменных.

Это сообщение отредактировал(а) ТарасАтавин - 3.9.2013, 08:06


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
ChipNDale
Дата 3.9.2013, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2010

Репутация: 1
Всего: 1



Опция -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.

http://linux.die.net/man/1/gcc

Это сообщение отредактировал(а) ChipNDale - 3.9.2013, 08:14
PM MAIL   Вверх
ТарасАтавин
Дата 3.9.2013, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Кодоблоки почему то не хотят её понимать. Если на странице Compoile settings->#defines ввести -S, то вообще пишет ошибку синтаксиса, а если S, то не реагирует.


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
ChipNDale
Дата 3.9.2013, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2010

Репутация: 1
Всего: 1



Потому что это не макрос, а опция командной строки (как -Wall, -O2 и др).
Не знаю где они указываются в code blocks, но гугл подсказывает, что в Project -> Build Options -> Compiler Settings tab -> Other Options.
PM MAIL   Вверх
bsa
Дата 3.9.2013, 10:35 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



И этот человек учит нас, что рекурсия это плохо, что прямой вызов конструкторов и деструкторов это зло, что профессионалы никогда не ошибаются и пр.  smile А сам ни поиском ни мозгом собственным пользоваться не умеет.
PM   Вверх
ТарасАтавин
Дата 7.9.2013, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(bsa @  3.9.2013,  10:35 Найти цитируемый пост)
И этот человек учит нас, что рекурсия это плохо. 
Ну как где я это написал? Не уместная рекурсия так же плоха, как пара миллиардов мёртвых переменных. Но ведь она бывает и необходима, тогда от неё нельзя избавляться.

Добавлено @ 10:22
Цитата(bsa @  3.9.2013,  10:35 Найти цитируемый пост)
 что профессионалы никогда не ошибаются и пр. 
Ну ка где я это написал? Ошибаются все. Но есть чисто ученические ошибки по элементарному не знанию, а есть вполне общие, в том числе среди ещё более идиотских, чем = вместо ==.

Добавлено @ 10:26
Цитата(ChipNDale @  3.9.2013,  10:09 Найти цитируемый пост)
Не знаю где они указываются в code blocks, но гугл подсказывает, что в Project -> Build Options -> Compiler Settings tab -> Other Options. 
Результат ещё хуже: -S вызывает синтаксическую гогу, а S отменяет компиляцию вовсе и пишет: 
Цитата
Compiling: Test.cpp
mingw32-g++.exe: error: S: No such file or directory
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

 
.

Это сообщение отредактировал(а) ТарасАтавин - 7.9.2013, 10:28


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
akizelokro
Дата 7.9.2013, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата(ТарасАтавин @  7.9.2013,  10:20 Найти цитируемый пост)
S отменяет компиляцию вовсе и пишет: 


S не отменяет компиляцию. Небось опции идут через "-", а "S" без "-" рассматривается как название входного файла.

Ну и ладно, в принципе. Академик Ершов, кажется, из новосибирского академгородка считался одним из самых блестящих алгоритмистов в стране, а по клавиатуре печатал со скоростью... с очень незначительной скоростью. smile 



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
ТарасАтавин
Дата 7.9.2013, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(akizelokro @  7.9.2013,  10:53 Найти цитируемый пост)
 Небось опции идут через "-", а "S" без "-" рассматривается как название входного файла.
Через минус получается синтаксическая гога в о-файле.



--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
ChipNDale
Дата 7.9.2013, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2010

Репутация: 1
Всего: 1



Я так полагаю, там линкер не может найти объектные файлы. В конце концов, можно открыть консольку и руками получить ассемблерный код.
PM MAIL   Вверх
ТарасАтавин
Дата 7.9.2013, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Как?


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
ChipNDale
Дата 7.9.2013, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2010

Репутация: 1
Всего: 1



Код

g++ -S main.cpp

Путь к компилятору и название файла с исходником подставить свои.

PM MAIL   Вверх
ТарасАтавин
Дата 7.9.2013, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Compiling: Test.cpp
mingw32-g++.exe: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings
 


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
ChipNDale
Дата 7.9.2013, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 11.6.2010

Репутация: 1
Всего: 1



А как командная строка выглядела?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.