У меня есть очень простой код для проверки mmap на низком адресе памяти.
unsigned long *p = mmap ((void*)(4096*16), 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_FIXED|MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0);
fprintf (stderr, "p=0x%lx\n", (unsigned long)p);`
*p = 2554;
printf ("p=0x%lx; *p=%ld\n", (unsigned long)p, *p);
Когда я запускаю код, я получаю следующий результат:
p=0x10000
Segmentation fault (core dumped)
в журнале dmesg я вижу следующие отпечатки:
segfault at 10000 ip 00000000004006cc sp 00007fff5845f4c0 error 6
В целом кажется, что mmap выполнен успешно, но операция записи завершилась неудачно. Я не могу объяснить эти два наблюдения конфликта. Помогите, пожалуйста. Спасибо.