Получить начальный адрес кучи текущего процесса? - PullRequest
2 голосов
/ 28 апреля 2010

Я изучаю работу системы на нижнем уровне, и мне было интересно, как malloc определяет начальный адрес кучи. Куча с постоянным смещением или какой-то вызов для получения начального адреса? Влияет ли стек на начальный адрес кучи?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2011

sbrk возвращает начальный адрес байтов, которые он добавляет (или удаляет). В новом процессе без выделенной кучи первый вызов sbrk должен затем вернуть начальный адрес секции "break" кучи. Если бы мне пришлось делать ставку, это то, что malloc реализации, которые используют brk / sbrk , вероятно, делают при первом запуске.

1 голос
/ 28 апреля 2010

Традиционно куча начиналась чуть выше текстового раздела и росла; фреймы стека вообще не влияли на начальный адрес, так как они растут в направлении к неотображенной странице 0. Тем не менее, в наши дни это более распространено для

  1. Первый адрес, который должен быть рандомизирован, чтобы эксплоитам было труднее найти правильный адрес в памяти
  2. Куча должна быть несмежной, поскольку malloc() обычно просто вызывает mmap(), чтобы получить адрес в любом месте виртуального адресного пространства
...