В более новых дистрибутивах (по состоянию на 2016 г.) PIE, по-видимому, включен по умолчанию, поэтому вам нужно явно отключить его при компиляции.
Вот небольшая сводка команд, которые могут быть полезны при локальных играх с упражнениями по переполнению буфера:
Отключить канарейку:
gcc vuln.c -o vuln_disable_canary -fno-stack-protector
Отключить DEP:
gcc vuln.c -o vuln_disable_dep -z execstack
Отключить пирог:
gcc vuln.c -o vuln_disable_pie -no-pie
Отключить все перечисленные выше защитные механизмы (предупреждение: только для локального тестирования):
gcc vuln.c -o vuln_disable_all -fno-stack-protector -z execstack -no-pie
Для 32-разрядных машин вам также необходимо добавить параметр -m32
.