как же так?

Jun 03, 2019 09:31


СЯО (Сегодня я осознал) что что-то не консистентно в моём понимании мироустройства.

Смотрите:

1. ядро может выкидывать страницы кода из памяти, потому что может подгрузить его в любой момент обратно. Удаление файла (насколько я понимаю) не проблема, потому что файл открыт. Предполагается, что содержимое text не меняется, потому что это бинарь, а без спецфигни (типа компрессии исполняемых файлов) ему меняться не положено.

2. У нас есть ELF-файл, который состоит из текста и relocation table, которая описывает какие адреса в тексте надо заменить (чтобы бинарь можно было грузить по произвольному адресу). Т.е. у нас кто-то (ld? ядро?) читает текст, читает relocation table, бежит по тексту и меняет адреса для call/jmp в соответствии с relocation table.

Каким образом «неизменяемый текст» из п.1 соотносится с «пишет в текст» из пункта 2? Если страницу текста выкинули из памяти, то когда приходит время её подгрузить, то что происходит? Повторная обработка согласно relocation table?

Это я ещё отношения с LD (динамически линкуемыми библиотеками) не затронул.

linux

Previous post Next post
Up