当共享库被映射到内存中时,Linux内核将分配虚拟内存区域到这个内存区域并分别标记它们的权限。但是我们知道x86 arch中的页表项中没有可执行的位。如果程序中有“call * edx”等调用指令来调用共享库中的函数,Linux内核如何知道目标地址是否可执行?如果权限在vma列表中不兼容,是否会导致一般性保护错误?Linux内核中的内存保护
4
A
回答
3
它不能。
上的架构(/操作模式),其中有没有执行页面权限从读取权限不同,内核将无法发现一个所谓非法地址执行由MMU检测到故障的结果。
0
你说得对,理论上内核可以根据内存区域对象上的更细粒度的权限来决定,但是这样的决策过程必须位于页面错误处理程序中,而这(我想)会使例行内存访问非常昂贵。
的内核,而不是采用x86上的这些简化规则:
- 读访问权总是意味着执行访问权
- 写访问权总是意味着读访问权
来源:理解Linux内核,第一版,第205页
相关问题
- 1. 更改linux内存保护
- 2. 内核模式和内存保护
- 3. Linux内核代码空间写保护
- 4. 如何保护linux中的堆内存?
- 5. Linux内核内存障碍
- 6. Linux内核中的内存损坏
- 7. MonoTouch:NSData内存保护
- 8. 剖析Linux内核使用的内存
- 9. Linux内核处理低内存条件
- 10. 为linux内核配置物理内存
- 11. 内核内存转储大小Linux
- 12. 读/写保护的内存?
- 13. 在Linux内核中
- 14. Linux内核 - 中断
- 15. 如何保护Linux中进程之间共享的内存
- 16. 缓存中有内存时的Linux内核模块OOM
- 17. Linux内核和我的内核模块
- 18. Linux内核add_timer
- 19. Linux内核的list.h
- 20. linux内核的config.h
- 21. Windows保护模式 - 内存
- 22. 内存保护属性
- 23. 读取内存保护
- 24. 剥离Linux中的内核?
- 25. linux内核的中断
- 26. 远程直接内存访问(RDMA)中的内存保护
- 27. 哪里linux内核保持写入管
- 28. linux内核中潜在的内存泄漏?
- 29. Linux内核空间中的动态内存分配
- 30. 了解Linux内核中的TCP内存管理
“库”意味着你正在加载可执行代码,所以根据定义,加载库的内存区域进入将不得不被标记为可执行文件。 –
如果启用了'PAE',则可以执行(无)执行控制。 –
在NX支持(也可以在32位模式下工作,并且Linux使用它)之前,[使用x86段限制可以完成无执行保护](https://www.redhat.com/magazine/009jul05/features/execshield /)。根据那篇文章,Solar Designer的OpenWall发行版使用它。更重要的是,Solar Designer实际上发明了用于非可执行堆栈的技术。显然[它并不完美](http://insecure.org/sploits/non-executable.stack.problems.html)。我没有读过这个漏洞,想知道这是否是一个可以解决的实现问题,或者是没有合适的NX的基本限制 –