◆ 무한한 가능성/& Programming

[펌글] 소스 분석 방법

치로로 2009. 1. 12. 00:22

출처 * | 대붕
원문 http://blog.naver.com/ssyollang/20032815480

안녕하세요? 환민입니다.

방금 소스 분석에 대한 Q/A글을 보고서, 한번 정리해 봐야지 하는
맘으로 글을 씁니다.

프로그래머라면 자주 해야 하는.. 피할 수 없는 것이 바로
남의 소스를 분석하는 일입니다.

그러나 항상 부담되고, 피하고 싶은 것이기도 하지요.

가장 기본적인 소스 분석법이자, 초보분들이 즐겨 사용하시는 방법이
텍스트 뷰어나 개발툴의 에디터에 소스를 불러 놓고, 텍스트 읽듯이
소스를 눈으로 읽어가는 방법입니다.

어떤 함수가 호출이 되는데.. 그게 무슨 내용일까? 하면
텍스트 뷰어나 개발툴의 문자열 Find 기능으로 함수를 찾아갑니다.

머 이런 방식을 사용합니다.

그나마 주석이 많이 달려 있으면 다행이지만, 또한 따로 문서화가
되어 있는 소스면 금상첨화겠지만.. 대부분 그렇지 못하죠.
(자신을 위해, 다른 사람을 위해 주석 많이 달고 문서화 합시다!)

본론으로 들어가서...

결론부터 말하자면,
"개발툴의 디버깅 기능을 활용해라!" 입니다.

디버깅의 주요 기능은 다음과 같습니다.

1. 브레이크 포인트 걸기/풀기
2. Step over
3. Trace into
4. 변수의 내용 살피기 등의 조사 기능

Step over는 걍 쭈욱~! 아래로 훑어 내려가는 거고,
Trace into는 함수 호출을 만나면 그 함수 안으로 파고 들어가는 거죠.

이걸 잘 활용하면 됩니다.

일단 엔트리 포인트를 찾습니다. (main이나 WinMain)
거기 맨 앞부분에 브레이크 포인트를 겁니다.

그리고 디버깅을 시작하면, 그 맨 앞의 브레이크 포인트에 걸려서
멈추게 됩니다.

자.. 이제 Step over를 이용합니다.
Step over 단축키를 따다닥 누르면서 어떤 식으로 로직이 수행되는지
머리속으로 생각합니다.

이해됐어~! 라고 생각되면 Step over 단축키 딱~! 누르고,
그 다음 소스 코드도 이해가 됐음 Step over를 누르고...

이렇게 흐름을 따라가면서 머리속에 전체 흐름을 그리기 시작합니다.
문서화를 해 놓아도 아주 좋습니다.

이렇게 한번 쫘악 훑습니다. 도중에 모르는 함수를 만나서 대강
이름을 보고 어떤 함수겠지.. 전체 흐름을 보고 어떤 일을 하는 함수겠거니
파악만 해둡니다. (Trace into로 파고들지 마세요.)

이제 한번 쭈욱 훑어 보았다면, 다시 엔트리 포인트부터 디버깅을 해나가기
시작합니다.

이제는 모르는 함수를 만나면 Trace into 기능을 이용해서 함수를 파고 듭니다.

이런식으로 한단계 파고 드는 방식으로 파악을 하고..
다시 디버깅을 해서 이번에는 그 함수 내에 또 모르는 함수가 호출되고
있다면 또 파고 들고..

이렇식으로 파고드는 깊이를 한단계씩 높여가면서 디버깅을 해 나갑니다.

API 함수나 어떤 라이브러리 함수 같은 저수준 함수는 굳이 디버깅해서
살펴보지 않아도 어떤 일을 하는지 알 수 있을테니까,
저수준 함수까지는 디버깅 안하셔도 됩니다.

이 디버깅을 이용한 소스코드 분석 방법이 제일 빠르고 좋은 방법인 것 같습니다.

한번 직접 해보세요. 그냥 눈으로 소스코드만 훑어보던 때와 비교하면
엄청난 시간 단축을 느끼실 수 있습니다.

저도 아직 이게 습관화 되지는 못했는데, 앞으로 습관화 시켜야 될 것 같네요. ^^

행복하세요.


출처: 한국 델파이 동호회 델마당 강좌, 팁, 정보