如何获取内存区域的保护标志,标志是mprotect中的PROT_READ /PROT_EXEC
我使用 mprotect() 为内存区域设置保护标志。 稍后,我想恢复该内存区域的保护标志。
我的问题是,如何获取内存区域的保护标志? 标志包括 PROT_READ ...
我的解决方法是手动解析 /proc/self/maps 。 但这个解决方案很笨拙......
我想知道是否有任何系统调用可以使用。
I use mprotect() to set protection flags to a memory area.
Later on, I want to restore this memory area's protection flags.
My question is, how to get protection flags of a memory area?
the flags inclue PROT_READ ...
My workaround is to parse /proc/self/maps manually.
But this solution is to clumsy ...
I wonder if there's any system call that I can use.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一般来说,这是唯一的方法。 POSIX 不提供访问保护的方法。在特定于应用程序的用法中,您可以控制映射页面的代码,您可以让它在当时的某个地方保存标志,但通常您必须读取
/proc/self/maps
。此外,如果您无法读取/proc
,您可能需要回退到某些默认权限。对于大多数情况来说,PROT_READ|PROT_WRITE
可能是合理的默认值,但在某些情况下,您可能还需要PROT_EXEC
。In general that's the only way. POSIX does not provide a way to access the protections. In application-specific usages where you have control over the code that maps the page, you could have it save the flags somewhere at that time, but in general you have to read
/proc/self/maps
. In addition, you may want to fallback to some default permissions if you can't read/proc
.PROT_READ|PROT_WRITE
is probably a reasonable default for most things but in some cases you may also wantPROT_EXEC
.