2016-09-19 5 views
0

http://www-users.cs.umn.edu/~boutcher/kprobes/kprobes.txt.html은 kprobe를 이해하기 위해 참조했습니다. 나는 kprobe_example.c를 문서에서 주어진대로 사용했다.insmod : ERROR : 모듈을 삽입 할 수 없습니다. kprobe_example.ko : 작동이 허용되지 않습니다.

나는 메이크 (같은 문서에서 가져온 코드)

내 커널 버전이 4.2이기 때문에 컴파일 오류가있어 일부 필드는 구조체 pt_regs에서 변경된를 사용하여 컴파일. 그래서 ip와 eflag로 eip를 kprobe_example.c에있는 플래그로 대체했습니다.이 플래그는 https://gist.github.com/murlee417/87c2eb43a6afa1954b05404a07813e81입니다. 그런 다음 성공적으로 컴파일 할 수있었습니다.

이제 루트 사용자로, 내가 그랬어 :

#insmod kprobe_example.ko 

내가 가지고 :

insmod: ERROR: could not insert module kprobe_example.ko: Operation not permitted 

내 메시지 버퍼가있다 :이 문제를 해결하기 위해

#dmesg 
[ 4537.478408] Couldn't find do_fork to plant kprobe 

는 제발 도와주세요 오류 및 insmod 작동합니다. 86 do_fork()에서

+0

아래와 같이 코드를 변경 내 커널 버전이 4.2이기 때문에'나는 컴파일 오류가있어 일부 필드는 구조체 pt_regs.'에서 변경되었습니다 -뿐만 아니라 단일 구조체를 변경됩니다. [함수'do_fork'의 정의 (http://lxr.free-electrons.com/source/kernel/fork.c?v=4.2#L1753)는 설정 매크로 * HAVE_COPY_THREAD_TLS *에 의존하게됩니다. 아마도이 매크로는 여러분의 경우에 정의되어 있으므로 (커널 빌드 디렉토리의'.config' 파일을 확인하십시오), 함수는 단순히 존재하지 않습니다. 이 경우 프로브 할 함수의 이름을 변경하십시오. – Tsyvarev

+0

do_fork를 do_mkdir로 바꿨는데 오류를 해결할 수있었습니다. 앞으로 필자는 커널 버전에 대한 커널 기능의 존재 여부를 항상 살펴볼 것입니다. Tsyvarev 대단히 감사합니다. – Murali

답변

0

sys_fork()로 알려진, 그래서

/* For each probe you need to allocate a kprobe structure */ 
static struct kprobe kp = { 
    //.symbol_name = "do_fork", 
    .symbol_name = "sys_fork", 
};