1

确定指针(任何类型的)是否映射到当前进程的肮脏技巧是将指针传递给access系统调用,然后errno检查EFAULT. 另一种是使用munlock和检查ENOMEM. 另一种是解析/proc/PID/maps。有没有副作用少的方法,最好不依赖procfs?

4

1 回答 1

1

检查指针是否可以访问的一种方法是简单地尝试使用它;如果您无权访问,您将收到一个 SIGSEGV - 您可以使用自己的信号处理程序捕获它。

为此,您将需要setjmp()在访问指针之前使用该函数,并且您将希望您的信号处理程序longjmp()退出。这些方面的东西:

if (setjmp(jmp_buf)) printf("The pointer was inaccessible.\n");
else {
    int x = *ptr;
    printf("The pointer was readable.\n");
}

在您的信号处理程序中,您需要:

...
longjmp(jmp_buf, 1);

这将导致您的应用程序以恢复所有寄存器并导致函数返回的方式在函数中特定点恢复(而不是其默认值)。setjmp()10

于 2012-06-19T18:15:26.373 回答