gpt4 book ai didi

c - 获取进程加载的所有共享库

转载 作者:行者123 更新时间:2023-11-30 15:26:28 25 4
gpt4 key购买 nike

我如何从task_struct中获取进程(类似于ltd)加载的所有共享库?

我试图通过探索task_struct中的"file"字段来做到这一点,但我在这方面失败了。

我使用的是 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();

最佳答案

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

关于c - 获取进程加载的所有共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com