2014-12-06 2 views
0

Как я могу получить все загруженные разделяемые библиотеки процессом (sth подобным ltd) из task_struct?Получение всех загруженных разделяемых библиотек процессом

Я пытаюсь сделать это, исследуя поле «файлы» из 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.