在android内核模式下获取完整的软件包名称
我正在开发一个项目,需要在内核模式下获取完整的应用软件包名称。我意识到包名称也是内核中的进程名称。但是,task_struct-> comm(进程名称)只能给我15个字符长。在android内核模式下获取完整的软件包名称
此外,fs/proc/base.c proc_get_cmdline()可以返回完整的进程名称,但它是私有函数。我尝试将proc_get_cmdline()导出到public并从我的可加载内核模块调用,但是当我调用public proc_get_cmdline()时它总是崩溃。
有没有什么办法可以在内核中获取完整的软件包名称?像从proc/pid/cmdline读取,从mm_struct等读取。欣赏任何代码示例。
你不应该调用proc_pid_cmdline()。
它是在FS/PROC/base.c非公共功能:
静态INT proc_pid_cmdline(结构seq_file *米,结构pid_namespace * NS, 结构PID * PID,结构的task_struct *任务)
但是,它所做的很简单:
get_cmdline(task,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/proc/*/cmdline会为您提供应用程序运行过程的完整软件包名称。我认为3.4版本的内核版本已经删除了get_cmdline命令。 – user2491515
可能我知道这个项目的目的是什么?你会从中获得什么? –
我们只获得了android框架和kerne的控件。我们希望将包名称发送到服务器,而无需更改应用程序和服务器。 – user2491515