我可以写保护Linux进程的地址空间中的每个页面吗?
我想知道是否有办法在
Linux中写保护每个页面
进程的地址空间(来自进程本身的内部,通过 的mprotect()).通过“每一页”,我的意思是每一页 进程的地址空间可能由普通用户写入 程序在用户模式下运行 – 所以,程序文本,常量, 全局变量和堆 – 但我会很满意常量, 全局和堆.我不想写保护堆栈 – 那 好像是个坏主意. 一个问题是我不知道从哪里开始写保护 如果我尝试保护所有页面从0x08048000到中断,我 顺便说一句,我想这样做的原因是因为我想创建一个 谢谢! 解决方法
如果您尝试在未映射的页面上调用ENOMEM,则从mprotect()接收ENOMEM.
你最好的办法是打开/ proc / self / maps,然后用fgets()一次读一行,找到你进程中的所有映射.对于不是堆栈的每个可写映射(在第二个字段中指示)(在最后一个字段中指示),使用正确的基址和长度调用mprotect()(根据第一个字段中的起始和结束地址计算). 请注意,此时您需要设置故障处理程序,因为读取映射文件本身的行为可能会导致在您的地址空间内进行写入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |