确定指针(任何类型)是否映射到当前进程的肮脏黑客是将指针传递给 access
系统调用,然后检查 errno
对于 EFAULT
。另一种方法是使用 munlock
并检查 ENOMEM
。另一种是解析/proc/PID/maps
。有没有副作用更少的方法,最好不依赖 procfs?
最佳答案
检查指针访问权限的一种方法是简单地尝试使用它;如果您无权访问,您将收到一个 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()
函数的特定点 恢复,恢复所有寄存器并导致函数返回 1
(而不是其默认值 0
)。
关于c - 判断指针是否映射到当前进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106150/