Ruby Hacking Guide 의 서장에는 소스 코드를 읽는 기법에 대한 논의가 나옵니다. http://tinyurl.com/3askrg 에서 번역된 글을 볼 수 있습니다 (기계 번역이라 매우 조악하지만).

거기에서는 코드 해석 방법을 "동적 해석"과 "정적 해석"으로 나누고 있는데요. "동적 해석"이란 실제로 코드를 수정하고 실행시켜서 그 작동을 확인하는 방법을 말합니다.

여기서 동적으로 해석하는 대상이 커널인 경우, 커널 로그 메시지를 실시간으로 보는 것이 유용한데요. 저는 PC에서 작업하는 경우 터미널 창 하나를 띄워 놓고 다음과 같은 명령을 실행합니다.

tail -F /var/log/kern.log -s 0.01

----------

이상은 그냥 잡담이고요. 제가 원래 쓰고 싶은 얘기는 지금부터입니다. 동적 해석시 제가 쓰는 팁을 하나 소개드리려 합니다.

어떤 함수를 누가 호출하는지 알고 싶은데, :cs f c (vim에서 cscope로 caller를 찾는 명령) 로도 안 잡히는 경우가 있습니다. 함수 포인터에 들어있는 걸 호출하거나 복잡한 매크로를 써서 이상하게 호출하는 경우 등입니다.

이때 저는, 해당 함수의 시작 부분에 PRINT_INFO(); 라는 줄을 삽입합니다. 그 정의는 다음과 같이 넣어 줍니다.

#include <linux/kallsyms.h>

#define PRINT_INFO()
do {
    printk("%s starting( caller:", __FUNCTION__);
    print_symbol("%s)n", (unsigned long) __builtin_return_address(0));
} while (0)
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 강좌, 팁, 정보등에 대해 올리는 게시판입니다. 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
» 누가 나를 호출했는지 찾기 + 포인터를 심볼 이름으로 변환하여 출력하기 [1] 지현구 2007.02.27 17863
121 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