我有一個非常簡單的代碼來測試低內存地址上的mmap。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是成功的,但寫入操作失敗。我無法解釋這兩個衝突意見。請幫幫我。謝謝。
感謝您的回答。正如你所提到的,它似乎是一個內核bug而不是一個功能。 – strongerwill