Як я можу побачити код складання для програми C ++?
Які популярні інструменти для цього?
Як я можу побачити код складання для програми C ++?
Які популярні інструменти для цього?
Відповіді:
Якщо ви будуєте програму самостійно, ви можете попросити ваш компілятор видати джерело збірки. Для більшості компіляторів 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
на Windows.Налагоджувачі також можуть показувати безвідмовно.
disas
команду в GDB,У GCC / G ++ компілюйте з -S
. Це виведе something.s
файл з кодом складання.
Редагувати: Якщо ви хочете, щоб результат був у синтаксисі Intel (який є IMO, його набагато читабельніше, і більшість навчальних посібників з його використання використовують), компілюйте з -masm=intel
.
-fverbose-asm
варіант
У Visual Studio ;
Цей сайт зараз працює для мене (2017): https://godbolt.org/
Багато людей вже розповіли, як випускати код складання за допомогою даного компілятора. Іншим рішенням є складання об’єктного файлу та скидання його за допомогою інструмента, такого як objdump , readelf (на Unix) або DUMPBIN ( посилання ) (у Windows). Ви також можете скинути виконувану програму, але прочитати вихід буде складніше.
Це має перевагу працювати однаково з будь-яким компілятором.
Який би ви не використовували налагоджувач, повинен мати перегляд збірки (Visual Studio, Borland IDE, gdb тощо). Якщо ви не використовуєте відладчик, і ви просто хочете побачити, яка збірка є в програмі, ви можете скористатися розбиральником або запустити програму і приєднати до неї відладчик і зробити дамп звідти. Див посилання на дизасемблери для отримання інформації про параметри.
Як хтось уже згадував, налагоджувач вашої платформи - хороша відправна точка. Перегляньте IDA Pro , щоб дізнатись про відбійний молот усіх налагоджувачів та розбирачів .
На платформах Unix / Linux (включаючи Cygwin) можна використовувати objdump --disassemble <executable>
.
Більшість компіляторів мають можливість вивести список складання. Наприклад, з VisualStudio ви можете використовувати щось на кшталт:
cl.exe /FAfile.asm file.c
Для кращої читабельності більшість налагоджувачів запропонують вигляд, який перемежовує розбирання з вихідним джерелом, тому ви можете порівнювати код з вихідним рядком компілятора за рядком.
Розвідувач PE Explorer для 32-бітних файлів PE. IDA для інших.
Ви також можете спробувати цей сайт: http://assembly.ynh.io/
Там ви можете вставити код C або C ++ і натиснути синю кнопку, щоб побачити еквівалентну версію збірки.
У Visual Studio ви можете створити список асемблерів для проекту C ++.
Перейдіть до властивостей проекту, а потім до C ++ / Output Files та встановіть параметр Assembler Output та розташування списку ASM на ім’я файлу.
Якщо ви користувач Eclipse, ви можете скористатися поданням Розбирання .
У вікні "Демонтаж" показана завантажена програма як інструкція асемблера, змішана з вихідним кодом для порівняння. Поточний рядок, що виконується, позначається маркером стрілки та виділяється у вікні. Ви можете виконати такі завдання у вікні Демонтаж:
- Встановіть точки прориву на початку будь-якої інструкції асемблера
- Увімкнення та вимкнення точок перерви та встановлення їх властивостей
- Перегляньте інструкції з розбирання програми
- Перейдіть до конкретних інструкцій програми
Alt +8