gpt4 book ai didi

c++ - 使用 mprotect 保护整个地址空间

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:54 38 4
gpt4 key购买 nike

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

因此对于格式为 08048000-0804c000 r-xp 00000000 08:03 7971106/bin/cat 的每个条目,我正在阅读前两个条目(此处 < strong>08048000 & 0804c000),将它们转换为十进制。让我们假设十进制等效值分别为 AB。然后我执行 mprotect((int*)A, B-A, PROT_READ)。但是这种方法给我段错误。我在这里找不到我做错了什么。可能是我在这里有一些知识差距导致了这个问题。有人可以给我一些建议吗?

最佳答案

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

毕竟,您是在告诉内核您不想被允许写入内存的任何部分。之后,您将继续运行您的流程,下次您尝试编写任何内容时,您将遇到段错误,因为不再允许这样做。

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

再仔细想想,在您“保护”内存(即共享库或可执行代码)后,执行 内存(即共享库或您的可执行代码)时,您甚至可能遇到段错误。

事实上,所有可以安全应用只读/不执行标志的内存位都已经设置了这些标志。

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

关于c++ - 使用 mprotect 保护整个地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20261874/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com