Я завтра готовлюсь к экзамену и наткнулся на такой вопрос:
После того, как мы запустим исполняемый файл с помощью strace, мы получим следующие системные вызовы для стандартной библиотеки C lib:
- open ("/ lib / libc.so.6", "O_RDONLY") = 3
- mmap (NULL, 36803630, PROT_READ | PROT_EXEC, MAP_PRIVATE | MAP_DENYWRITE, 3, 0) = 0x7f312ab35000
- mmap (0x7f312aeae000, 20480, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED | MAP_DENYWRITE, 3, 0x179000) = 0x7f312aeae000
Вопрос в том, почему первый системный вызов mmap использует PROT_READ | PROT_EXEC, а второй PROT_READ | PROT_WRITE.
Пожалуйста, подробно объясните мне, что происходит после каждого вызова mmap. Я не понимаю, зачем процессу нужно изменять libc (доступ для записи).