如何通过task_struct的进程(类似于ltd)获取所有已加载的共享库?
我试图通过浏览文件'来做到这一点。来自task_struct的字段,但我对此失败了。
我正在使用Linux ubuntu 3.2.0-31-generic x86_64
//修改
通过R..来解决上述问题 它打印超过应该,但我认为它仍然有用
struct task_struct *p;
struct file* f;
struct mm_struct* mm;
struct vm_area_struct* vm_area;
rcu_read_lock();
for_each_process(p) {
printk(KERN_WARNING "Pid: %d %d", p->pid, atomic_read(&p->files->count));
mm = get_task_mm(p);
if (mm == 0)
continue;
vm_area = mm->mmap;
while (vm_area != 0){
f = vm_area->vm_file;
if (f != 0){
printk(KERN_WARNING "file %s", f->f_path.dentry->d_iname);
} else {
printk(KERN_WARNING "file null");
}
vm_area = vm_area->vm_next;
}
}
rcu_read_unlock();
答案 0 :(得分:1)
内核不知道加载共享库,只知道内存映射。您可以从vma列表中获取这些内容,也可以在/proc/$pid/maps
中的用户空间中查看它们。另一方面,应用程序可以通过dl_iterate_phdr
获取自己的共享库列表。