您的位置:首页 > 运维架构 > Linux

Linux内核态设置某片虚拟地址为只读的方法

2010-09-20 10:20 267 查看
下面这段代码主要用在虚拟地址映射比较固定的情况。该代码的作用主要是便于调试“内存被别的代码踩”,把被怀疑的内存设置为只读后,如果有别的程序写到该区域就会打印出Stack,很容易找出是谁踩了你的内存了,呵呵。。。

RT_STATUS mmap_SetAddrRDONLY (unsigned long virt_addr, unsigned long size /* KB */)
{
int i;
pte_t *p_pte;
uint32 level;
int ret = RT_OK;
ASSERT(size < MEM_SIZE_256M);

for (i = 0; i < (size/4); i++) {
p_pte = lookup_address(virt_addr, &level);
if(level != PG_LEVEL_4K){
ret = RT_FAIL;
ASSERT(FALSE);
break;
}
if (pte_present(*p_pte)){
set_pte(p_pte, pte_wrprotect(*p_pte));
virt_addr += MEM_SIZE_4K;
} else {
ASSERT(FALSE);
ret = RT_FAIL;
break;
}
}
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: