Я использую Ubuntu 12.04 32-бит сейчас для некоторого эксперимента Мне нужно отключить ASLR, как я могу это сделать? и после этого, что я должен сделать, чтобы снова включить ASLR?
Интерфейс /proc/sys/kernel/randomize_va_space управляет ASLR в системном масштабе.
Если вы не хотите общесистемного изменения, используйте функцию ADDR_NO_RANDOMIZE для временного отключения ASLR. Управление этим значком личности может выполняться с помощью setarch и его опции -R (manpage), добавляя команду.
Мне очень удобно открывать совершенно новую оболочку, используя:
setarch `uname -m` -R /bin/bash
Это откроет новую оболочку Bash для вас с отключенным ASLR, включая все дочерние процессы (запущены программы из этой оболочки)
Просто exit оболочка, как только вы закончите.
Кстати, на i386, ulimit -s unlimited может " отключить "ASLR.
EDIT (Apr 2016): ulimit -s unlimited был исправлен и назначен личность .
Более постоянные способы отключения ASLR должны быть сохранены в виртуальной машине по очевидным причинам.
, чтобы проверить возможность перезаписывать обратные адреса фрейма стека и т. д., вам нужно будет скомпилировать без стековых канарейков , а для выполнения кода в стеке необходимо скомпилировать с -z execstack, сделав
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
Вы можете просто использовать sudo sysctl kernel.randomize_va_space=0 для временного отключения ASLR.