LINUX.ORG.RU

Карта памяти процесса

 ,


0

1

Всем здрям! Интересует карта памяти процесса ниже адресов загрузки секции text. Что там таке и можно ли это свободно использовать (mmap-ом или как-то еще)? Или это какая-то системная область? Чем вообще обусловлены начальные адреса загрузки секций у исполняемых elf-файлов с адресов аля 0x800000 (речь не идет о релоцируемых разделяемых библиотеках)? В интернете что-то не нагуглил подобной информации. Все рассказывают о том, что выше сегмента text. Т.е. куча, стек, библиотеки, гигабайт ядра. А вот про нижний диапазон - ни слова. Пролейте свет, кому не сложно. P.S. Про исходники знаю. Просьба не отправлять на их изучение. Ибо долго и не соответствует уровню интереса. А интерес - просто интерес. Без какой-либо задачи.

Существует разделение на виртуальную память и физическую. Если я правильно понял про .text, то это всего лишь указатель на entry point в виртуальном адресом пространстве твоего elf бинарника. Т.е. это виртуальное адресное пространство только твоего процесса, он не знает ничего про гигабайты ядра и прочее.

http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

как-то так.

xpahos ★★★★★ ()
Последнее исправление: xpahos (всего исправлений: 1)
Ответ на: комментарий от xpahos

Да, меня интересует именно виртуальное адресное пространство. Эту статью читал, спасибо. В последнем гигибайте (согласно статье) находятся какие-то функции и модуля ядра для быстрого доступа к ним из прерываний. Со стороны процесса к ним прямого доступа нет. НО. обратите внимание, секция text загружается с адреса 0х8048000. А на что расходуются адреса ниже этого значения? и можно ли их свободно юзать? Вот в чем вопрос.. Да... И адрес загрузки text и точка входа не всегда одно и то же. ;-)

Pink-Pank ()

чтобы сегфолт срабатывал не только на явный адрес 0x0, но и немного дальше

anonymous ()
Ответ на: комментарий от Pink-Pank

Да, меня интересует именно виртуальное адресное пространство. Эту статью читал, спасибо. В последнем гигибайте (согласно статье) находятся какие-то функции и модуля ядра для быстрого доступа к ним из прерываний.

vdso/vsyscall не про прерывания. Это проброс в userspace некоторых сисколов. Самый частый пример - gettimeofday. Чтобы не переходить в контекст ядра при каждом запросе текущего времени сделали vdso и теперь время получается в userspace без дополнительных контекст свитчей.

НО. обратите внимание, секция text загружается с адреса 0х8048000. А на что расходуются адреса ниже этого значения? и можно ли их свободно юзать? Вот в чем вопрос.. Да... И адрес загрузки text и точка входа не всегда одно и то же. ;-)

Понял. Насколько я знаю там еще идут куски ELF файла. Использовать его 100% нельзя даже если есть rw права.

xpahos ★★★★★ ()
Ответ на: комментарий от xpahos

Насколько я знаю там еще идут куски ELF файла. Использовать его 100% нельзя даже если есть rw права

А не дадите ли какую-нибудь ссыль, где об этом можно почитать? Или хотя бы по каким ключевым словам искать в гугле? По поводу кусков Elf-файла у меня почему-то большие сомнения...

Pink-Pank ()
Ответ на: комментарий от xpahos

То что надо, спасибо! т.е. получается, там лежит собственно сам загрузчик и могут располагаться какие-то библиотеки и vdso. И теоретически, между всем этим можно mmap-ом выхватить себе еще кусок памяти. Моя душа спокойна. :-D

Pink-Pank ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.