免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: gong_yue
打印 上一主题 下一主题

[内存管理] 如何将linux kernel指定的一段内存设置为只读 [复制链接]

论坛徽章:
2
酉鸡
日期:2013-09-26 11:11:15摩羯座
日期:2014-01-08 13:45:19
11 [报告]
发表于 2014-12-15 11:39 |只看该作者
不知道用内联汇编定义rodata section能否满足你的需求

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
12 [报告]
发表于 2014-12-15 21:39 |只看该作者
回复 10# gong_yue

内核没有直接把内核所在内存更改为只读的函数,但可以同通过set_pte来更改对应的页表项来实现。前提必须找到对应的页表项,可以通过pxx_offeset来实现,如果你是X86的,那就方便一点,有人给你写好了--lookup_address。

整个过程,其实和kmemcheck相做的类似。可以参考一下它的实现:
  1. void kmemcheck_hide_pages(struct page *p, unsigned int n)
  2. {
  3.         unsigned int i;

  4.         for (i = 0; i < n; ++i) {
  5.                 unsigned long address;
  6.                 pte_t *pte;
  7.                 unsigned int level;

  8.                 address = (unsigned long) page_address(&p[i]);
  9.                 pte = lookup_address(address, &level);
  10.                 BUG_ON(!pte);
  11.                 BUG_ON(level != PG_LEVEL_4K);

  12.                 set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT));
  13.                 set_pte(pte, __pte(pte_val(*pte) | _PAGE_HIDDEN));
  14.                 __flush_tlb_one(address);
  15.         }
  16. }
复制代码
对你这个需求,你要去掉的是_PAGE_RW,而不是_PAGE_PRESENT。
还是比较简单的。

但的两点要注意。
1. 你的数组必须页对齐
2. 要搞清楚你的内核是采用大页还是小页。





   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
13 [报告]
发表于 2014-12-15 21:42 |只看该作者
看了一下,一下午了,论坛都没有人发贴了。很安静,安静得令人恐怖。

论坛徽章:
0
14 [报告]
发表于 2014-12-17 09:54 |只看该作者
回复 13# Tinnal


    非常感谢回复!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP