systemtap 관련 간단한 소개입니다.

남용우 2007.11.06 20:12 조회 수 : 17057 추천:148

토요일날 술자리에서 잠깐 말이나온 systemtap 관련해서 tip/tech에 해당내용을 올리겠습니다.
모든분들이 다 아시는 내용일수 있는데, 혹시 보시고 틀린부분있으면 지적바랍니다.

먼저 systemtap을 사용할려먼, kernel-debuginfo패키지와 systemtap 패키지를 인스톨하셔야 합니다.

그리고 systemtap은 스크립트와 같은 언어로 되어 있습니다.
다음은 샘플프로그램입니다.

#! /usr/bin/env stap

# Usage: ./keyhack.stp -g

probe kernel.function("kbd_event") {
        s = sprintf("%dn", $event_code)
        printf("%s", s)
}

probe end {
        printf("nDONEn")
}

위의 소스는 systemtap의 sample 소스 입니다
원본 소스는 m키 값을 b키 값으로 바꾸는 소스인데요
제가 그냥 출력으로 바꾸었습니다.

밑에 보시면 "probe end {" 부분이 있는데요, 이부분이 프로그램을 종료 할때 호출되는 부분입니다, 물론 시작할때 호출되는 부분은 "probe begin" 이로 선언하면 됩니다.
근데, 위의 부분에서는 시작 부분이 필요가 없어서 사용을 안하였습니다.

그리고 "probe kernel.function("kbd_event") {" 부분이 실제로 보고자 하는 커널 함수를 등록하는 부분입니다. 위의 소스에서는 커널의 "kbd_event"을 보고자 해서 등록을 하였습니다.
그리고 함수 원형은 "static void kbd_event(struct input_handle *handle, unsigned int vent_type, unsigned int event_code, int value)" 다음과 같습니다.

그리고 소스 중간에 보시면은 "s = sprintf("%dn", $event_code)" 부분이 있는데 이 부분은 함수 원형의 인자로 "event_code" 값을 s라는 버퍼로 저장하라는 의미입니다.
그리고 바로 밑은 그냥 출력입니다.....

그리고 제가 여기서 문법을 모두 설명하기가 힘들거 같습니다.
자세한 내용은 다음(http://sourceware.org/systemtap/documentation.html)싸이트를 참조 하시면 될꺼 같습니다.

그리고 예상하셨든이 systemtap은 커널의 kprobes을 이용하여 위의 작업을 합니다.
kprobe관련 자료는 리눅스 소스에 "linux/Documentation/kprobes.txt에 있습니다.

systemtap을 사용안하셔도 kprobes을 이용하면 해당작업을 할수 있습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 강좌, 팁, 정보등에 대해 올리는 게시판입니다. woos 2016.04.09 246
129 Pro Git 2장, 3장 요약입니다. 아폴로 2013.11.05 52110
128 포토샵 웹버전입니다. [1] 강진성 2010.05.14 40685
127 맥에서 리눅스 커널 빌드하기 [2] K 2013.06.30 24819
126 #pragma에 관련해서.. [2] 원민수 2006.07.19 20782
125 kernel 2.6의 kzalloc함수 (원민수 씀) 백창우 2007.02.23 19337
124 태훈님에 이어. ARM kernel 참고자료 백창우 2007.11.05 19014
123 리눅스 커널 스터디 참고자료 (x86) [4] 리누즈박 2013.05.06 18396
122 누가 나를 호출했는지 찾기 + 포인터를 심볼 이름으로 변환하여 출력하기 [1] 지현구 2007.02.27 17863
» systemtap 관련 간단한 소개입니다. 남용우 2007.11.06 17057
120 허접 영어 사전입니다. [3] 백창우 2008.04.22 16092
119 define을 사용한 version 처리. 원민수 2008.02.09 15026
118 여기는 팁, 기타 정보를 올리는 곳입니다. 백창우 2006.06.05 14751
117 커널 분석용 vim 플러그인 설치하기 (Rev.4) [21] 리누즈박 2013.06.30 13973
116 막강 디버깅 매크로 DM_PRINT() [4] file 배상경 2010.11.23 12045
115 if문에 사용하는 likely와 unlikely 함수의 용도 [1] 아폴로 2014.03.05 11173
114 조금은 묵직한 시스템, 뇌감시장치 김성현2 2011.11.17 10585
113 리눅스 커널 코딩 스타일입니다. [1] 아폴로 2013.09.13 10147
112 xen 4.1 설치 방법(우분투 11.04) [2] 이상철 2012.11.14 10109
111 Kernel 소스코드 github에 복사하는 법 [6] 리누즈박 2013.06.16 9836
110 돈되는 이야기?! 삼성 손가락 혈압계 [1] 김성현2 2011.10.20 9493
XE Login