![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Как скомпилить проект не в исполняемый код, а на язык ассемблера, чтоб можно было его прочитать?
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Берёшь скомпилированный файл, и читаешь через бинарный поток.
Или ты про дизассемблер, чтобы перевести в инструкции? Это сообщение отредактировал(а) akizelokro - 3.9.2013, 07:07 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
В исполняемом файле все инструкции уже в опкодах, а мне бы в мнемониках. И дирректив там вроде уже нет совсем. Мне попадалось в литературе, что c/c++ иногда компилируют в два этапа: сначала на ASM, потом вручную оптимизируют, а потом уже окончательно компилируют в код. И листинги попадались. С именами не только функций, но даже переменных. Листинг на c++, рядом листинг на ASM, се имена сохранены и добавлены новые. Не очень похоже на дизасемблер. И ещё мне попадалось упоминание того, что и сам компилятор может компилировать дважды: сначала c++ в ASM, потом ASM в код. Так вот, я хочу скомпилить только первый этап и сохранить его в файл. Не для оптимизации, а для анализа. Хочу посмотреть, на что прога похожа на низком уровне. Можно, конечно, дизить. Но зачем, если есть исходник? Лучше с него. И получить файл на ASME со всеми именами сегментов, перегруженных функций, переменных.
Это сообщение отредактировал(а) ТарасАтавин - 3.9.2013, 08:06 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
Опция -S.
http://linux.die.net/man/1/gcc Это сообщение отредактировал(а) ChipNDale - 3.9.2013, 08:14 |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Кодоблоки почему то не хотят её понимать. Если на странице Compoile settings->#defines ввести -S, то вообще пишет ошибку синтаксиса, а если S, то не реагирует.
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
Потому что это не макрос, а опция командной строки (как -Wall, -O2 и др).
Не знаю где они указываются в code blocks, но гугл подсказывает, что в Project -> Build Options -> Compiler Settings tab -> Other Options. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
И этот человек учит нас, что рекурсия это плохо, что прямой вызов конструкторов и деструкторов это зло, что профессионалы никогда не ошибаются и пр.
|
|||
|
||||
| ТарасАтавин |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Ну как где я это написал? Не уместная рекурсия так же плоха, как пара миллиардов мёртвых переменных. Но ведь она бывает и необходима, тогда от неё нельзя избавляться.
Добавлено @ 10:22 Ну ка где я это написал? Ошибаются все. Но есть чисто ученические ошибки по элементарному не знанию, а есть вполне общие, в том числе среди ещё более идиотских, чем = вместо ==. Добавлено @ 10:26
. Это сообщение отредактировал(а) ТарасАтавин - 7.9.2013, 10:28 -------------------- Не так всё плохо, как оно есть на самом деле. |
||||
|
|||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
S не отменяет компиляцию. Небось опции идут через "-", а "S" без "-" рассматривается как название входного файла. Ну и ладно, в принципе. Академик Ершов, кажется, из новосибирского академгородка считался одним из самых блестящих алгоритмистов в стране, а по клавиатуре печатал со скоростью... с очень незначительной скоростью. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
Я так полагаю, там линкер не может найти объектные файлы. В конце концов, можно открыть консольку и руками получить ассемблерный код.
|
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Как?
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
Путь к компилятору и название файла с исходником подставить свои. |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
А как командная строка выглядела?
|
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Какая командная строка? Я опцию задал -S Test.cpp. А командную строку я вообще не знаю, как сочинить.
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
Это сообщение отредактировал(а) ChipNDale - 7.9.2013, 18:08 |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Опять жэ, по гуглению: возьмите командную строку (обычную, без -S) из вывода codeblocks со включённым "Compile settings" -> "advanced options" -> "show full command line"
Попробуйте запустить терминал (cmd.exe) и запустить её в этом терминале. Скорее всего, для успешной работы придётся перейти в каталог Вашэго проекта. Когда запустите (и оно скомпилируется) -- начните модифицыровать эту командную строку, чтобы получить ассэмблерный листинг. Для этого во-первых, оставьте в строке только один файл C++ (обычно -- это файлы с расшырением .cpp), добавьте опцыю -S и замените опцыю -o траляляля на -o что-нибудь.S |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
В нем не происходит ничего сверхъестественного, всего лишь установка переменных окружения (добавление пути к g++ в PATH, еще что-нибудь). Основная идея не меняется: открыть консоль, передать компилятору опцию -S и cpp-файл. На выходе будет сгенерирован файл .s с ассемблерным кодом. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Там опции смотреть надо. я по minGW нулевый, вообще не работал.
Есть, кстати, и возможность написать makefile и запускать его. Хотя формат makefile'ов более-менее понятен и однообразен для всех компиляторов. Это сообщение отредактировал(а) akizelokro - 8.9.2013, 07:58 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
||||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Вообщем, пусть Тарас сядет за изучение опций компилятора, потратит полдня и сам сообразит, какие опции ему прописать надо. И эта.. Прежде чем в командной строке запустить "gcc ..", пусть не забудет перейти в каталог, где этот main.cpp находится Это сообщение отредактировал(а) akizelokro - 8.9.2013, 08:22 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
В project build options->compile settings нет адвансовых опций.
Добавлено через 5 минут и 21 секунду А как? -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 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; |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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. >>
|
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Так опции набираются нижним регистром? Спасибо.
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| ChipNDale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 11.6.2010 Репутация: 1 Всего: 1 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |