amarao_san

Category:

как же так?

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

Смотрите: 

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

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

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

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

Error

default userpic

Your IP address will be recorded 

When you submit the form an invisible reCAPTCHA check will be performed.
You must follow the Privacy Policy and Google Terms of use.