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 여기는 팁, 기타 정보를 올리는 곳입니다. 백창우 2006.06.05 14751
128 #pragma에 관련해서.. [2] 원민수 2006.07.19 20782
127 kernel 2.6의 kzalloc함수 (원민수 씀) 백창우 2007.02.23 19337
» 누가 나를 호출했는지 찾기 + 포인터를 심볼 이름으로 변환하여 출력하기 [1] 지현구 2007.02.27 17863
125 태훈님에 이어. ARM kernel 참고자료 백창우 2007.11.05 19014
124 systemtap 관련 간단한 소개입니다. 남용우 2007.11.06 17058
123 define을 사용한 version 처리. 원민수 2008.02.09 15026
122 허접 영어 사전입니다. [3] 백창우 2008.04.22 16092
121 포토샵 웹버전입니다. [1] 강진성 2010.05.14 40685
120 막강 디버깅 매크로 DM_PRINT() [4] file 배상경 2010.11.23 12045
119 perspective of the medical industry and engineering [15] 김성현2 2011.09.16 8197
118 돈되는 이야기?! 음주운전방지 앱 [3] 김성현2 2011.10.18 6775
117 돈되는 이야기?!, 내친김에 하나더, 나는 잘 자고 있을까? [8] 김성현2 2011.10.18 7789
116 돈되는 이야기?! 삼성 손가락 혈압계 [1] 김성현2 2011.10.20 9493
115 조금은 묵직한 시스템, 뇌감시장치 김성현2 2011.11.17 10585
114 C++에서 meta class 이용하기 [2] 이경문 2012.05.06 6888
113 멀티유저 드라이빙 환경 [3] pororo 2012.08.25 7257
112 xen 4.1 설치 방법(우분투 11.04) [2] 이상철 2012.11.14 10109
111 리눅스 커널 스터디 참고자료 (x86) [4] 리누즈박 2013.05.06 18397
110 2013.05.25 ARM 아키텍쳐 세미나 1차 발표자료 - by 민홍 교수님 [5] file K 2013.05.25 4980
XE Login