2011-03-23 102 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中的第一個字符串,以滿足您的需求。