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)
거기에서는 코드 해석 방법을 "동적 해석"과 "정적 해석"으로 나누고 있는데요. "동적 해석"이란 실제로 코드를 수정하고 실행시켜서 그 작동을 확인하는 방법을 말합니다.
여기서 동적으로 해석하는 대상이 커널인 경우, 커널 로그 메시지를 실시간으로 보는 것이 유용한데요. 저는 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 |
9 | 포토샵 웹버전입니다. [1] | 강진성 | 2010.05.14 | 40685 |
8 | 허접 영어 사전입니다. [3] | 백창우 | 2008.04.22 | 16092 |
7 | define을 사용한 version 처리. | 원민수 | 2008.02.09 | 15026 |
6 | systemtap 관련 간단한 소개입니다. | 남용우 | 2007.11.06 | 17058 |
5 | 태훈님에 이어. ARM kernel 참고자료 | 백창우 | 2007.11.05 | 19014 |
» | 누가 나를 호출했는지 찾기 + 포인터를 심볼 이름으로 변환하여 출력하기 [1] | 지현구 | 2007.02.27 | 17863 |
3 | kernel 2.6의 kzalloc함수 (원민수 씀) | 백창우 | 2007.02.23 | 19337 |
2 | #pragma에 관련해서.. [2] | 원민수 | 2006.07.19 | 20782 |
1 | 여기는 팁, 기타 정보를 올리는 곳입니다. | 백창우 | 2006.06.05 | 14751 |
.