Ответ 1
В современных Linux-системах компоновщик будет отмечать неисполняемый IFF стек/данные, все объекты, участвующие в ссылке, имеют специальный раздел "маркер" .note.GNU-stack
.
Если вы скомпилируете, например, int foo() { return 1; }
в сборку (с gcc -S foo.c
), вы увидите следующее:
.section .note.GNU-stack,"",@progbits
Для nasm
синтаксис показан в в разделе 7.9.2 руководства; вам нужно что-то вроде этого:
section .note.GNU-stack noalloc noexec nowrite progbits
Примечание
Это нужно сделать для каждого файла .o
, который входит в исполняемый файл. Если для любого объектного файла требуется исполняемый стек или данные, он устанавливается для всего сегмента.