我试图了解有关如何真正混淆的内存管理(mmap,brk,sbrk)的更多信息:
char *ptr = sbrk(0);
char *ptr2 = ptr + 100000;
*ptr2 = 8;
printf("%d\n", *ptr2);
不触发分段错误吗?我正在OS X Mojave上用clang编译它。
sbrk()的手册页上说已经过时,但也说sbrk()应该可靠地返回程序中断。如果是这样,并且pagesize为4096字节,那么是否不应该为超出程序中断100000个空格的地址设置值会触发段错误?如果它不能可靠地返回程序中断(不能,如果可以为超出其地址的地址设置值呢?),那么如何在Mac OS上可靠地找到程序中断?
完全相同的代码在Ubuntu 18.10上产生了段错误。
谢谢!