2011-03-23 224 views

回答

0

你可以看看的特殊文件/proc/<pid>/

例如,/proc/<pid>/exe是指向实际的二进制符号链接。

/proc/<pid>/cmdline是命令行的空分隔列表,所以第一个单词是进程名称。

+0

我相信Malesh N.希望能够从内核代码中做到这一点。 – craig65535 2015-05-12 17:06:07

+0

这个_can_可以通过使用'filp_open',@ craig65535 – Quaker 2017-09-14 13:22:02

1

我的内核模块加载“modprobe -v my_module --allow-unsupported -o some-data”,并提取“some-data”参数。下面的代码给我的整个命令行,这里是我如何解析出感兴趣的参数:

struct mm_struct *mm; 
unsigned char x, cmdlen; 

mm = get_task_mm(current); 
down_read(&mm->mmap_sem); 

cmdlen = mm->arg_end - mm->arg_start; 
for(x=0; x<cmdlen; x++) { 
    if(*(unsigned char *)(mm->arg_start + x) == '-' && *(unsigned char *)(mm->arg_start + (x+1)) == 'o') { 
     break; 
    } 
} 
up_read(&mm->mmap_sem); 

if(x == cmdlen) { 
    printk(KERN_ERR "inject: ERROR - no target specified\n"); 
    return -EINVAL; 
} 

strcpy(target,(unsigned char *)(mm->arg_start + (x+3))); 

“目标”持有-o参数后的字符串。您可以稍微压缩一下 - 调用者(在本例中为modprobe)将成为mm-> arg_start中的第一个字符串,以满足您的需求。