2011-03-23 5 views

답변

13

struct task_struct 매우

감사는 executable name excluding path을 포함, 회원이 comm라는 포함되어 있습니다.

Get current macro from this file는 현재 프로세스를 시작한 프로그램의 이름을 얻습니다 (insmod/modprobe에서와 같이).

위 정보를 사용하면 이름 정보를 얻을 수 있습니다.

0

확실하지는 않지만 find_task_by_pid_ns이 유용 할 수 있습니다. 당신은 예를 들어 /proc/<pid>/

에있는 특수 파일을 볼 수 있습니다

0

/proc/<pid>/exe 실제 바이너리를 가리키는 심볼릭 링크입니다.

/proc/<pid>/cmdline은 널로 구분 된 명령 행 목록이므로 첫 번째 단어는 프로세스 이름입니다.

+0

Malesh N.이 커널 코드에서이 작업을 수행 할 수 있기를 바랍니다. – craig65535

+0

이것은'filp_open', @ craig65535를 사용하여 커널 공간에서 얻을 수 있습니다. – Quaker

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의 첫 번째 문자열이됩니다.

관련 문제