Расположение стека в Linux с ASLR - PullRequest
0 голосов
/ 05 мая 2018

В Linux, с включенным ASLR, существует ли диапазон адресов, где находится адрес стека пользователя? Как насчет кучи, адресов инструкций (текстовый раздел)? В общем, можно ли посмотреть адрес и сказать, для него ли это данные или код?

Edit: Я пытаюсь написать Pintool, который просматривает EIP после возврата и проверяет, указывает ли EIP на область данных. Давайте предположим, что NX не включен в этой системе.

По какой-то причине это было отвергнуто. К счастью, ответ можно найти здесь: https://security.stackexchange.com/questions/185315/stack-location-range-on-linux-for-user-process/185330#185330

1 Ответ

0 голосов
/ 08 мая 2018

cat /proc/self/maps покажет начальное расположение стека основного потока. Это может быть неточным по крайней мере по следующим причинам:

  • ты не в главной теме
  • любая часть программы была построена с опцией -fsplit-stack, или вы вызываете библиотеку, которая делает что-то похожее
  • вы находитесь в обработчике сигналов, который запрашивает sigaltstack стек вместо
  • вы делаете странные приемы alloca, как CHICKEN Scheme, чтобы использовать стек как кучу
  • ...

Также обратите внимание, что общие области не являются полностью случайными. См. Проект AddressSanitizer, чтобы воспользоваться этим.

...