可以让OS内核帮我们检查。
但是似乎没有直接的接口,那就绕个弯子请他帮忙。
将这段虚地址空间的内容,写入一个无关紧要的文件。
这段虚地址空间是否有效,内核自然会帮我们检查的。
要知道,内核对用户空间传入的任何数据,都是不信任的,都会充分检查的。
因为什么样的用户都有,内核可不想轻易被用户搞挂掉 :)
好了,下面的代码展示了Linux下此功能的实现方法。
int is_address_range_valid(void *address_start, int len)
{
int fd = open("/dev/null", O_WRONLY);
int ret = write(fd, address_start, len);
if (-1==ret && EFAULT == errno)
ret = 0;
else
ret = 1;
close(fd);
return ret;
}
通过man 2 write命令,可以看到write手册页对EFAULT的说明如下。
EFAULT buf is outside your accessible address space.
本文的思想来自如下网址: