c - Unix 上的 IsBadReadPtr 模拟

标签 c debugging unix libc

有没有类似于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/

相关文章:

c - 当我用 signal(SIGINT,f) 捕捉到一个信号时,f 是并行执行的吗?

c - 在C中,只有在堆区越界访问才会出现段错误吗?或者它甚至可以发生在堆栈中的静态数组中吗?

visual-studio - 摆脱 "There is no source code available for the current location."

linux - 根据文件名模式和文件内容列出文件名?

macos - 如何提高 mac 操作系统上的 xset 速率?

c - 为什么我不能将此指针设置为 NULL?

C程序跳过fgets

c - 如何编写 DD-WRT C 应用程序?

debugging - 创建一个可以是空操作的 typescript 函数

linux - 如何在 bash 中使用 tr 删除行首的所有空格