2014-12-06 46 views
0

如何從task_struct獲取所有加載的共享庫的進程(類似於ltd)?通過進程獲取所有加載的共享庫

我試圖通過從task_struct探索'文件'字段來做到這一點,但我在這方面失敗了。

我使用Linux操作系統Ubuntu 3.2.0-31-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

內核不知道加載共享庫,只有內存映射。您可以從vma列表中獲取這些內容,也可以從/proc/$pid/maps的用戶空間中看到它們。另一方面,應用程序可以通過dl_iterate_phdr獲取其自己的共享庫列表。