我有一个非常简单的代码来测试低内存地址上的 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是成功的,但是写操作是失败的。我无法解释这两个冲突的观察结果。请帮我。谢谢。