У нових дистрибутивах (станом на 2016 рік) здається, що PIE увімкнено за замовчуванням, тому вам потрібно буде відключити його явно під час компіляції.
Ось невеликий підсумок команд, які можуть бути корисними при локальній грі з вправами переповнення буфера загалом:
Вимкнути канарку:
gcc vuln.c -o vuln_disable_canary -fno-stack-protector
Вимкнути DEP:
gcc vuln.c -o vuln_disable_dep -z execstack
Вимкнути PIE:
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
параметр.