Если рандомизация размещения адресного пространства (ASLR) отключена, будет ли у нас детерминированный mmap?
Если ваше приложение имеет точно такую же структуру памяти в момент i-го mmap (с точки зрения того, какие страницы виртуального адресного пространства отображаются, а какие нет);тогда mmap должен быть детерминированным в ядре Linux.
Возможны некоторые странные ситуации, которые могут изменить структуру памяти.Например, дополнительные аргументы командной строки могут сдвигать стек по более низкому адресу.Существует много файлов, созданных в среде исполнения c (например, локали), и если размер некоторых файлов изменился по сравнению с предыдущим запуском, компоновка памяти также будет изменена.Даже потребление стека может повлиять на это.
Если распределение памяти вашего приложения (как размеры, так и порядок размещения) через malloc изменилось, mmap не будет детерминированным.Итак, если ваше приложение является многопоточным;это должно исправить порядок вызовов malloc или ограничить все malloc для основного потока.
мм / mmap.c: arch_get_unmapped_area - нефиксированный распознаватель адресов mmap по умолчанию является детерминированным IIF дерево VMA такое же, И история предыдущего mmap такая же (имеется кэш mm->free_area_cache
который живёт между вызовами в mmap.