Модераторы: 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   Вверх
ТарасАтавин
Дата 7.9.2013, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Какая командная строка? Я опцию задал -S Test.cpp. А командную строку я вообще не знаю, как сочинить.


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


Новичок



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

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



Код

:: Установка переменных окружения
> "C:\Program Files (x86)\CodeBlocks\MinGW\mingwvars.bat"

:: Убеждаемся, что в текущем каталоге есть файл main.cpp
> dir
...
main.cpp
...

:: Его содержимое - Hello, World
> type main.cpp
#include <iostream>
:: остальной вывод опущен

> g++ -S main.cpp
> type main.s
:: Видим ассемблерный код


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


Опытный
**


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

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



Цитата(ChipNDale @  7.9.2013,  17:59 Найти цитируемый пост)
CodeBlocks\MinGW\mingwvars.bat"
А у меня нет такого файла.



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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Опять жэ, по гуглению: возьмите командную строку (обычную, без -S) из вывода codeblocks со включённым "Compile settings" -> "advanced options" -> "show full command line"
Попробуйте запустить терминал (cmd.exe) и запустить её в этом терминале. Скорее всего, для успешной работы придётся перейти в каталог Вашэго проекта.

Когда запустите (и оно скомпилируется) -- начните модифицыровать эту командную строку, чтобы получить ассэмблерный листинг. Для этого во-первых, оставьте в строке только один файл C++ (обычно -- это файлы с расшырением .cpp), добавьте опцыю -S и замените опцыю -o траляляля на -o что-нибудь.S
PM MAIL   Вверх
ChipNDale
Дата 8.9.2013, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ТарасАтавин @  7.9.2013,  21:59 Найти цитируемый пост)
А у меня нет такого файла.

В нем не происходит ничего сверхъестественного, всего лишь установка переменных окружения (добавление пути к g++ в PATH, еще что-нибудь). Основная идея не меняется: открыть консоль, передать компилятору опцию -S и cpp-файл. На выходе будет сгенерирован файл .s с ассемблерным кодом.
PM MAIL   Вверх
akizelokro
Дата 8.9.2013, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Там опции смотреть надо. я по minGW нулевый, вообще не работал.
Есть, кстати, и возможность написать makefile и запускать его.
Хотя формат makefile'ов более-менее понятен и однообразен для всех компиляторов.



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


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


Новичок



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

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



Цитата(akizelokro @  8.9.2013,  10:56 Найти цитируемый пост)
Там опции смотреть надо. я по minGW нулевый, вообще не работал.

То, что я приводил в посте выше, было под виндой с mingw, так что ничего хитрого.
PM MAIL   Вверх
akizelokro
Дата 8.9.2013, 08:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Цитата(ChipNDale @  8.9.2013,  08:06 Найти цитируемый пост)
То, что я приводил в посте выше, было под виндой с mingw, так что ничего хитрого. 


Вообщем, пусть Тарас сядет за изучение опций компилятора, потратит полдня и сам сообразит, какие опции ему прописать надо.
И эта..
Прежде чем в командной строке запустить "gcc ..", пусть не забудет перейти в каталог, где этот main.cpp находится


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


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


Опытный
**


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

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



В project build options->compile settings нет адвансовых опций.

Добавлено через 5 минут и 21 секунду
Цитата(akizelokro @  8.9.2013,  08:19 Найти цитируемый пост)
Вообщем, пусть Тарас сядет за изучение опций компилятора,
А как?



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


Крокодил
**


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

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



Цитата

А как?


там же есть всякие хелповники и манулы, в инете надыбай по запросу "codeblocks command line option"
Тут, например, короткий вариант.
Или запусти через опцию "codeblocks -h", на экране будет их список и краткое описание. А "codeblocks -h >>1.txt" выдаст это описание сразу в текстовый файл вместо экрана.

Потом же, впиши путь к codeblocks под Винду в переменную PATH, если не получится, то придётся либо упорядочить через makefile, либо указывать имена файлов в полной форме. Например, "C:\где-то-там\codeblocks <список-опций> <полное-имя-файла-с-путём>. Если в коммандной строке *Nix'а или DOS работал, вспомнишь прошлое. 
И FAR тебе в помощь!

Есть же, потом, если не найдешь (или должны быть) форумы кодоблоковцев и адреса электронной почты у них в поддержке. Если быстро ничего не находишь, то, значит, в глобальной свалке мусора уже ничего и не найдёшь (философски) и пишешь тогда по этим адресам. А если и там ничего, я могу на Линкедине запросить и помочь.

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


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

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



Вот что говорит текущая документацыя на сайте CodeBlocks: <<During the build process of a project, the compiler messages are displayed in the Messages window in the Build Log tab. If you wish to receive detailed information, the display can be extended. For this purpose click *Settings* /*Compiler and Debugger* and select *Other Settings* in the drop-down field. Figure 1.13: Setting detail information Take care that the correct compiler is selected. The *Full command line* setting in the Compiler Logging field outputs the complete information in the Build Log. >>
PM MAIL   Вверх
ТарасАтавин
Дата 14.9.2013, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так опции набираются нижним регистром? Спасибо.


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


любитель
****


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

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



Цитата(ТарасАтавин @  14.9.2013,  10:42 Найти цитируемый пост)
Так опции набираются нижним регистром?

и верхним тоже  smile  


--------------------
PM MAIL WWW   Вверх
ChipNDale
Дата 15.9.2013, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ТарасАтавин @  14.9.2013,  14:42 Найти цитируемый пост)
Так опции набираются нижним регистром?

Выше в теме была ссылка на ман gcc, там есть опции и в верхнем, и в нижнем регистре.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0703 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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