c - 判断指针是否映射到当前进程

标签 c memory system-calls

确定指针(任何类型)是否映射到当前进程的肮脏黑客是将指针传递给 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/

相关文章:

c - 在 do-while 的第二个循环中显示错误消息

linux - Linux 内核如何决定使用哪个内存区域?

c - 如果两个指针指向同一个内存地址,是只需要使用free(ptr)一次还是两次?

C++ 为 POD 对象赋值

Linux 好像获得了很多 *at 调用?这些的动机是什么?

c - 程序运行时学习C scanf函数的问题(编译时没有错误)C编程绝对初学者指南第8章

c - 需要使用 Unsigned Int 的浮点精度

c - 如何向 Audacious 添加调试符号?

c - 如何让系统调用 write() 打印到屏幕上?

c - linux 中的 stat 系统调用返回错误