首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试Linux下内存是否可访问

测试Linux下内存是否可访问
EN

Stack Overflow用户
提问于 2013-01-25 01:47:44
回答 3查看 1.5K关注 0票数 1

给定一个不受信任的内存地址,Linux中有没有一种方法可以测试它是否指向有效的、可访问的内存?

例如,在mach中,您可以使用vm_read_overwrite()尝试从指定位置复制数据。如果地址无效或不可访问,它将返回错误代码,而不是使进程崩溃。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-25 03:00:43

这是一个典型的TOCTOU案例--你在某一时刻检查内存是可写的,然后你试图写入它,但不知何故(例如,因为应用程序释放了它),内存不再可访问。

实际上,只有一种有效的方法可以做到这一点,那就是,当你真正需要使用它时,捕获你在写入它时得到的错误。

当然,您可以使用一些技巧来尝试确定内存是否“可能是可写的”,但实际上您无法确保它是可写的。

你可能想稍微解释一下你实际想要做什么,如果你更具体一些,也许我们会有一些更好的想法。

票数 1
EN

Stack Overflow用户

发布于 2013-01-25 01:50:46

从内存中编辑(例如,编辑到/dev/null中( write:使用/dev/null,使用管道可能无法正常工作)),如果地址不可访问,您将收到EFAULT错误。

如果可写内存是可写的,我不知道如何在不破坏其内容的情况下测试可写内存。

票数 2
EN

Stack Overflow用户

发布于 2017-01-05 11:42:03

您可以尝试msync:

代码语言:javascript
复制
int page_size = getpagesize();                                                            
void *aligned = (void *)((uintptr_t)p & ~(page_size - 1));                           
if (msync(aligned, page_size, MS_ASYNC) == -1 && errno == ENOMEM) {
    // Non-accessibe
}

但是这个函数可能会很慢,不应该在性能关键的情况下使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14507524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档