【发布时间】:2021-04-18 00:37:56
【问题描述】:
我正在尝试根据进程的vma's 从内存中读取值。但是,每当我尝试集体访问这些位置时,系统都会挂起然后崩溃。
void print_mmap(struct vm_area_struct *mmap)
{
while (mmap != NULL)
{
printk(KERN_INFO "vm_start: %lu vm_end: %lu difference: %lu\n", mmap->vm_start, mmap->vm_end, (mmap->vm_end-mmap->vm_start));
int i;
for (i=0;mmap->vm_start<mmap->vm_end;i++)
{
(unsigned long*) (mmap->vm_start+i);
}
mmap = mmap->vm_next;
}
}
为什么会发生这种情况?我在调用函数之前使用了 rcu_read_lock() 和 task_lock()。如果我从内存中只打印一个值或几个值,那么驱动程序运行得很好,它似乎只有在我从头到尾访问时才会挂起。有更好的方法吗?
【问题讨论】: