有没有类似于IsBadReadPtr的函数在 Unix 中?至少 IsBadReadPtr 的一些功能?
我想编写一个程序,如果进程发生错误(如 SIGSEGV
),它会使用react并恢复一些信息。但我想检查指针以确保数据没有损坏并查看它们是否可以安全访问。否则崩溃处理程序本身就会崩溃,从而变得毫无用处。
有什么建议吗?
最佳答案
在 POSIX 系统上执行此操作的常用方法是使用 write()
系统调用。如果无法读取内存,它将在 errno
中返回 EFAULT
而不是发出信号:
int nullfd = open("/dev/random", O_WRONLY);
if (write(nullfd, pointer, size) < 0)
{
/* Not OK */
}
close(nullfd);
(/dev/random
是在 Linux 上用于此目的的好设备,因为它可以由任何用户编写,并且实际上会尝试读取给定的内存。在没有 的操作系统上/dev/random
或不可写的地方,尝试 /dev/null
)。另一种选择是匿名管道,但如果您想测试大区域,则需要定期清除管道的读取端。
关于c - Unix 上的 IsBadReadPtr 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4611776/