Отображения r-xp
, r--p
и rw-p
- это просто области, для которых требуются разные разрешения.
Отображение тайны ---p
является следствием смещений виртуальной памяти в разделах, описываемых файлом ELF, которые необязательно совпадают с физическими смещениями в файле (для выравнивания может быть заполнение).
т.е. сам файл ELF может выглядеть так:
| .... sections .... | .... more sections .... |
... но опишите схему памяти, которая выглядит следующим образом:
| .... sections .... | gap | .... more sections .... |
(Вы можете увидеть это, используя objdump -h
или readelf -e
.)
Итак, общий принцип заключается в том, что ld.so
необходимо выделить достаточно памяти для всего:
| |
... затем сделайте одно отображение для первой части:
| .... sections .... | |
... а затем создайте второе отображение, чтобы получить вторую часть в нужном месте:
| .... sections .... | | .... more sections .... |
Затем защищает «дыру», оставленную в виртуальном адресном пространстве. Это таинственное отображение, которое вы видите:
| .... sections .... |XXXXXXXXXXXXX| .... more sections .... |
Я считаю, что дыра защищена, а не освобождена для повторного использования, чтобы упростить задачу: она гарантирует, что каждая библиотека имеет только один диапазон виртуальных адресов, который принадлежит ей, и никому другому.