Узнайте флаг оптимизации компиляции из исполняемого файла - PullRequest
6 голосов
/ 16 февраля 2012

Здесь у меня есть исполняемый файл, не зная его среды сборки, с предположением об использовании gcc / g ++.Есть ли способ узнать флаг оптимизации, используемый во время компиляции (например, O0, O2, ...)?

Все средства приветствуются, независимо от того, анализируются ли они двоичным кодом или каким-либо отладочным тестом через gdb (еслимы предполагаем, что флаг -g доступен во время компиляции).

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Если вам повезет, командная строка присутствует в самом исполняемом файле, в зависимости от используемой операционной системы и формата файла.Если это Elf-файл, попробуйте выгрузить содержимое, используя objdump из GNU binutils

0 голосов
/ 03 мая 2016

Я действительно не знаю, может ли это помочь, но проверить O0 довольно просто при разборке (objdump -d), поскольку сгенерированный код вообще не имеет оптимизации и добавляет несколько инструкций для упрощения отладки.

Обычно в x86 пролог функции включает сохранение указателя стека (я полагаю, для обратного следа). Так, если вы найдете, например, главную функцию, вы должны увидеть что-то вроде:

... main: ... нажать% rbp ... mov% rsp,% rbp

И вы должны видеть этот «шаблон» почти в каждом начале функций. Для других целей (я не знаю, какова ваша целевая платформа), вы должны увидеть более или менее похожие последовательности сборки в прологах или перед вызовом функции.

Для других уровней оптимизации все гораздо сложнее.

Извините, что остался расплывчатым и не ответил на весь вопрос ... Просто надеюсь, что это поможет.

...