Подтвердить что ты не робот

Обнаружение флагов компиляции GCC двоичного кода

Есть ли способ узнать, какие gcc-флаговые файлы были скомпилированы с помощью?

4b9b3361

Ответ 1

Быстрый просмотр документации GCC ничего не меняет.

Ребята Boost - одни из самых умных разработчиков С++, и они прибегают к именованию , поскольку это, как правило, невозможно каким-либо другим способом (исполняемый файл мог быть создан на любом количестве языков, в любом случае, в любом количестве версий компилятора).


(Добавлено намного позже): Оказывается, GCC имеет эту функцию в 4.3, если ее запрашивают при компиляции кода:

Новый ключ командной строки -frecord-gcc-switches... вызывает использование командной строки для вызова компилятора в файл объекта, который создается. Точный формат этой записи зависит от целевого и двоичного файлов, но обычно он принимает форму раздела примечания, содержащего текст ASCII.

Ответ 2

Экспериментальное доказательство:

diciu$ gcc -O2 /tmp/tt.c -o /tmp/a.out.o2
diciu$ gcc -O3 /tmp/tt.c -o /tmp/a.out.o3
diciu$ diff /tmp/a.out.o3 /tmp/a.out.o2 
diciu$

Я воспринимаю это как нет, поскольку двоичные файлы идентичны.

Ответ 3

Я тот, кто попросил Брайана опубликовать это изначально. Мой вопрос касался двоичного кода самбы. Я узнал, что вы можете запустить smb -b, чтобы получить информацию о том, как он был создан.

Ответ 4

Я так не думаю.

Вы можете увидеть, есть ли у него отладочные символы, что означает, что -g был использован;) Но я не могу представить, каким образом вы могли бы узнать, какие каталоги были использованы для поиска включенных заголовков, например.

Возможно, лучший ответ возможен, если вы нацелитесь только на определенный флаг; например если вы хотите узнать только, был ли установлен флаг "...", когда этот бинарный файл был скомпилирован или нет. В этом случае, какой флаг это будет?