собранной мною небольшой тестовой библиотеке вообще есть сегмент с прописанным виртуальным адресом 0x3DF0 и размером в 552 байта. То есть, он задевает ещё немного следующую страницу памяти, из-за чего придётся ещё практически бесполезно занимать кучу последующих байтов вплоть до 0x4FFF включительно. Но может разве "mmap" так делать? Он же, вроде бы, под капотом работает так, что в реальности он просто выделяет нужное количество страниц памяти и выдаёт их. Или флажок "MAP_FIXED" как раз отдельные байты с любым выравниваем фиксирует и правит права доступа на заданные для них?
Посмотрите Ман на mmap. Вам придется терять какую то часть Вирт памяти на остатки страниц. Но это Вирт память , на чтение с нее емнип приходят нули просто
по факту границы надо расширять, до выравнивания указанного в заголовках самого elf, а потом мапить этот диапазон, в результате некоторые куски файла на грание сегментов могут задублироваться
Вот да, здесь ты прав точно
В program headers, вы хотели сказать? ELF-заголовок не хранит данные по выравниванию
я сказал где-то в заголовка самого elf, я не указывал на что-то конкретное
Кстати, задублироваться могут именно из-за того, что вот по страницам мы будем мапить 0x2000 на 0x3000, и там могут оказаться куски прошлого сегмента?
при это могут быть казусы, что виртуальные адреса конца одного и начало следующего будут различаться на p_align
Обсуждают сегодня