Я пытался увидеть карту памяти процесса на Linux x86-64 с помощью команды pmap -x
. Я смутился, глядя на выход pmap. В частности, для записей для отображения динамических библиотек. Для них есть несколько записей (на самом деле 4 для большинства из них, причем некоторые из них имеют 3 записи). Ниже приведен пример
Address Kbytes RSS Dirty Mode Mapping
00000036ca200000 88 64 0 r-x-- libpthread-2.5.so
00000036ca216000 2044 0 0 ----- libpthread-2.5.so
00000036ca415000 4 4 4 r---- libpthread-2.5.so
00000036ca416000 4 4 4 rw--- libpthread-2.5.so
Вторая строка для каждой библиотеки всегда имеет размер 2 МБ, тогда как у нее нет разрешения на страницу. Во всех библиотеках кажется, что RSS ВСЕГДА равен нулю. Последние две строки имеют одинаковый размер (размер базовой страницы) и одинаковые разрешения (в нескольких библиотеках нет rw-отображения).
Есть ли у кого-нибудь объяснения? Я вроде как чувствую, что, возможно, сопоставление с защитой только для чтения выполняется загрузчиком для чтения метаданных библиотеки, а часть с исполняемым разрешением фактически является кодом для библиотеки. Возможно, я ошибаюсь.
Но я не имею в виду эту среднюю строку. Нет разрешения и нет обычаев? Здесь есть какие-то слова мудрости?
Я также видел несколько страниц, которые, как сообщается, были в анонимной памяти и не имеют установленного бита режима. Что они представляют?