确定指针(任何类型)是否映射到当前进程的脏黑客是将指针传递给access
系统调用,然后检查errno
EFAULT
。另一种方法是使用munlock
并检查ENOMEM
。另一个是解析/proc/PID/maps
。是否存在副作用较少的方法,最好不依赖于procfs?
答案 0 :(得分: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);
这将使您的应用程序在<{em> {/ 1}}函数中的某个特定点恢复,其方式是恢复所有寄存器并使函数返回setjmp()
(而不是其默认值为1
)。