G CC идентифицирует себя через метаданные ; в asm это директива .ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4"
.
Вы могли бы увидеть то же самое через gcc -v
, чтобы просто напечатать свою версию G CC.
Это говорит о том, что ваш сервер использует старый хрустящий G CC 4.8.4. (Я бы действительно рекомендовал использовать более новый компилятор, если вы заботитесь об оптимизации; например, g cc 8 ввел более простую автоматическую векторизацию, которая лучше подходит для выровненных массивов, и позволяет аппаратному обеспечению обрабатывать смещение, просто используя невыровненные нагрузки.)
Таким образом, https://godbolt.org/ вы можете получить идентичный asm, который вы получаете локально, установив версию компилятора C на x86-64 G CC 4.8.4 и используя -fstack-protector-strong
. (поскольку Ubuntu настраивает G CC для использования этой опции). Обычно вы также должны использовать -Wall -O2
как минимум или -O3
; смотреть на неоптимизированный асм, как правило, пустая трата времени. См. Как убрать "шум" из вывода сборки GCC / clang? - особенно ссылку на выступление Мэтта Годболта на CPPcon.)
Выберите C или C ++ в качестве "языка" на Годболте ; в системе Ubuntu будут установлены g cc и g ++ 4.8.4.
В более поздних версиях Ubuntu включите -fPIE
как часть параметров по умолчанию, так что у вас также будет возможность чтобы включить это вручную на Godbolt, чтобы соответствовать тому, что вы видите локально. Но я думаю, что 14.04 слишком стар для этого.
(Мы можем сказать, что это x86-64, потому что указатель стека - это RSP, а не ESP. И да, G CC в x86 по умолчанию использует синтаксис AT & T, если только вы используйте -masm=intel
. По умолчанию в проводнике компилятора Godbolt включена эта опция вывода. Тем не менее, это просто другой текстовый синтаксис для одних и тех же машинных инструкций; если вы знаете, как читать оба, разница не имеет значения.)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. * * * * * * * * * * * * * * * * * * * "*" Не "* *" возможно"Godbolt" скомпилирует с немного отличающимися версиями заголовка; Я думаю, что в его настройке установлены разные компиляторы с использованием заголовков из одной установки, вместо того, чтобы у каждой была своя собственная. Хотя я могу ошибаться по этому поводу. Обычно это нормально.