Как я могу увидеть код сборки для программы на C ++?
Какие популярные инструменты для этого?
c++
assembly
disassembly
Фанат
источник
источник
Alt +8
Ответы:
Спросите у компилятора
Если вы собираете программу самостоятельно, вы можете попросить ваш компилятор создать исходный код сборки. Для большинства компиляторов UNIX используйте
-S
переключатель.Если вы используете ассемблер GNU, компиляция с помощью
-g -Wa,-alh
даст смешанный исходный код и сборку на stdout (-Wa
просит драйвер компилятора передать параметры ассемблеру,-al
включает листинг сборки и-ah
добавляет листинг «исходный код высокого уровня»):g++ -g -c -Wa,-alh foo.cc
Для Visual Studio используйте
/FAsc
.Заглянуть в двоичный код
Если вы скомпилировали двоичный файл,
objdump -d a.out
в UNIX (также работает для cygwin),dumpbin /DISASM foo.exe
на винде.Используйте свой отладчик
Отладчики также могли демонстрировать дизассемблирование.
disas
команду в GDB,источник
В GCC / G ++ компилируйте с помощью
-S
. Это выведетsomething.s
файл с кодом сборки.Изменить: если вы хотите, чтобы вывод был в синтаксисе Intel (который является IMO, гораздо более читаемым, и большинство руководств по сборке используют его), скомпилируйте с
-masm=intel
.источник
-fverbose-asm
опциюВ Visual Studio ;
источник
Для gcc / g ++
Это сгенерирует prog.s с некоторыми комментариями к переменным, используемым в каждой строке asm:
источник
Этот сайт сейчас у меня работает (2017): https://godbolt.org/
источник
Многие люди уже рассказали, как сгенерировать ассемблерный код с помощью данного компилятора. Другое решение - скомпилировать объектный файл и выгрузить его с помощью такого инструмента, как objdump , readelf (в Unix) или DUMPBIN ( ссылка ) (в Windows). Вы также можете выгрузить исполняемый файл, но это будет сложнее прочитать вывод.
Это имеет то преимущество, что работает одинаково с любым компилятором.
источник
Какой бы отладчик вы ни использовали, он должен иметь представление сборки (Visual Studio, Borland IDE, gdb и т. Д.). Если вы не используете отладчик и просто хотите увидеть, какая сборка находится в программе, вы можете использовать дизассемблер или, альтернативно, запустить программу и присоединиться к ней с помощью отладчика и выполнить дамп оттуда. См. Ссылки на дизассемблеры для получения информации о параметрах.
источник
Как уже упоминал кто-то другой, отладчик вашей платформы - хорошая отправная точка. Для отбойного молотка всех отладчиков и дизассемблеров, посмотрите на IDA Pro.
На платформах Unix / Linux (включая Cygwin) вы можете использовать
objdump --disassemble <executable>
.источник
Большинство компиляторов имеют возможность выводить список сборок. Например, с VisualStudio вы можете использовать что-то вроде:
Однако для лучшей читаемости большинство отладчиков будут предлагать представление, которое чередует разборку с исходным исходным кодом, поэтому вы можете сравнивать свой код с выводом компилятора построчно.
источник
Дизассемблер PE Explorer для 32-битных файлов PE. IDA для других.
источник
Вы также можете попробовать этот сайт: http://assembly.ynh.io/
Там вы можете вставить свой код C или C ++ и нажать синюю кнопку, чтобы увидеть версию, эквивалентную сборке.
источник
В Visual Studio вы можете создать список ассемблера для проекта C ++.
Перейдите в свойства проекта, затем в C ++ / Output Files и установите для параметра Assembler Output и ASM list location имя файла.
источник
На Intel Mac OS X 10.8 (Mountain Lion)
-masm=intel
директива не работала. Однако, если у вас установлен Xcode , он должен был установить инструмент с именем otool:Вы должны предоставить скомпилированный объектный код в качестве параметра.
источник
Если вы являетесь пользователем Eclipse, вы можете использовать представление Disassembly .
источник