首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mprotect保护整个地址空间。

使用mprotect保护整个地址空间。
EN

Stack Overflow用户
提问于 2013-11-28 09:12:43
回答 1查看 927关注 0票数 1

对于我的大学项目,我需要写保护整个地址空间的过程。我正在读取/proc/self/maps文件并解析映射。

因此,对于格式08048000-0804c000 r-xp 00000000 08:03 7971106 /bin/cat,的每个条目,我正在读取前两个条目(在这里,08048000 & 0804c000),将它们转换为十进制)。让我们假设十进制等价物分别是AB。然后我做mprotect((int*)A, B-A, PROT_READ).但是这种方法给了我分割错误。我不知道我在这里做错了什么。可能是我在这里有一些知识差距,这是造成问题的原因。有人能给我一些建议吗?

EN

回答 1

Stack Overflow用户

发布于 2013-11-28 09:43:31

假设您的实现是正确的,我仍然希望看到分段错误。

毕竟,您是在告诉内核,您不希望被允许写入内存的任何部分。之后,您将继续运行您的进程,下次尝试编写任何内容时,您将得到一个分段错误,因为这是不允许的。

这很可能是当您在“保护”堆栈之后从mprotect()返回时。

考虑得更多一点,在执行内存(即共享库或可执行代码)时,您甚至有可能在“保护”内存之后得到分段错误。

实际上,应用只读/不执行标志的所有内存段都已经设置了这些标志。

我想这就是这个大学项目给你的洞察力。

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

https://stackoverflow.com/questions/20261874

复制
相关文章

相似问题

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