通过进程获取所有已加载的共享库

时间:2014-12-06 22:14:47

标签: c linux-kernel kernel-module

如何通过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();

1 个答案:

答案 0 :(得分:1)

内核不知道加载共享库,只知道内存映射。您可以从vma列表中获取这些内容,也可以在/proc/$pid/maps中的用户空间中查看它们。另一方面,应用程序可以通过dl_iterate_phdr获取自己的共享库列表。