gpt4 book ai didi

android - android内核模式获取完整包名

转载 作者:行者123 更新时间:2023-11-30 16:53:10 27 4
gpt4 key购买 nike

我正在开发一个项目,需要在内核模式下获取完整的应用程序包名称。我意识到包名称也是内核内的进程名称。但是,task_struct->comm(进程名称)只能给我 15 个字符长。

此外,fs/proc/base.c proc_get_cmdline()可以返回完整的进程名称,但它是私有(private)函数。我尝试将 proc_get_cmdline() 导出到公共(public)并从可加载内核模块中调用,但当我调用公共(public) proc_get_cmdline() 时它总是崩溃。

有什么方法可以获取内核中完整的包名称吗?就像从 proc/pid/cmdline 读取、从 m​​m_struct 读取等。欣赏任何代码示例。

最佳答案

您不应该调用 proc_pid_cmdline()。

它是 fs/proc/base.c 中的非公共(public)函数:

static int proc_pid_cmdline(struct seq_file *m, struct pid_namespace *ns, struct pid *pid,struct task_struct *task)

但是,它的作用很简单:

get_cmdline(任务, m->buf, PAGE_SIZE);

但这不太可能返回完整路径,并且不可能在每种情况下都确定完整路径。 arg[0] 值可能会被覆盖,文件可能会被删除或移动等。进程可能会以模糊原始命令行的方式执行 exec(),以及出现各种其他问题。

扫描我的 opensuse 12.3 系统/proc/*/cmdline 会发现各种不太有用的结果:

/proc/1/cmdline
/sbin/init showopts
/proc/10/cmdline

/proc/11/cmdline

/proc/1163/cmdline
/sbin/dhclient6 -6 -cf /var/lib/dhcp6/dhclient6.eth0.conf -lf /var/lib/dhcp6/dhclient6.eth0.lease -pf /var/run/dhclient6.eth0.pid -q eth0
/proc/12/cmdline

/proc/13/cmdline

/proc/14/cmdline

/proc/15/cmdline

/proc/16/cmdline

/proc/17/cmdline

/proc/1710/cmdline
/sbin/dhcpcd --netconfig -L -E -HHH -c /etc/sysconfig/network/scripts/dhcpcd-hook -t 0 -h del1-dhp-32429 eth0
/proc/172/cmdline

/proc/185/cmdline

/proc/186/cmdline

/proc/187/cmdline

/proc/19/cmdline

/proc/2/cmdline

/proc/20/cmdline

/proc/21/cmdline

/proc/22/cmdline

/proc/23/cmdline

/proc/25/cmdline

/proc/254/cmdline

/proc/255/cmdline

/proc/26/cmdline

/proc/2671/cmdline
/usr/lib/upower/upowerd
/proc/2674/cmdline
/usr/lib/polkit-1/polkitd --no-debug
/proc/27/cmdline

/proc/2727/cmdline
/usr/lib/udisks2/udisksd --no-debug
/proc/28/cmdline

/proc/285/cmdline
/usr/lib/systemd/systemd-journald
/proc/286/cmdline

/proc/288/cmdline

/proc/29/cmdline

/proc/2913/cmdline
/usr/sbin/cron -n
/proc/2924/cmdline
/usr/sbin/sshd -D
/proc/3/cmdline

/proc/3023/cmdline
/usr/lib/postfix/master
/proc/3090/cmdline
pickup -l -t fifo -u
/proc/3091/cmdline
qmgr -l -t fifo -u
/proc/31/cmdline

/proc/311/cmdline
/usr/lib/systemd/systemd-udevd
/proc/3132/cmdline
/usr/lib/vmware/bin/vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permissions,allow_other /var/run/vmblock-fuse
/proc/3168/cmdline
/usr/sbin/vmware-authdlauncher
/proc/32/cmdline

在 openSUSE 12.3 中为我工作:

for I in /proc/*/cmdline; do echo $I; cat $I | tr '\000' ' '; echo; done

关于android - android内核模式获取完整包名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40967771/

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