소스코드 분석할때 어떤식으로 하시나요?
글쓴이: superkkt / 작성시간: 금, 2005/11/25 - 5:38오후
남의 코드를 분석할때 좋은 방법이 있나요? 아니면 나름대로의 방법을 만들어서 하시는지..
저는 일단 main 함수부터 시작해서 모든 변수 및 구조체 등의 선언, 정의 과정을 다 따라다니면서 여기에 이런 값이 들어가고 저기에 저런값이 들어가고.. 계속 순서대로 따라다닙니다.
그런데 프로그램이 작을때는 할만한데 좀만 커지면 변수들도 햇갈리고 무슨 값이 들어가는지 놓치고 정신이 없어지네요..
제가 하는 방법이 잘못된건가요? 좀 더 효율적인 방법이 있다면 조언 부탁드리겠습니다.
Forums:
전 디버거돌리면서 분석합니다.코드보다보면 함수포인터 부분에서 어떤 함
전 디버거돌리면서 분석합니다.
코드보다보면 함수포인터 부분에서 어떤 함수가 콜이되는지 알수없는 경우가 많더군요..
그런후 구조체 중심으로 분석하고 있습니다. 잘 짜여진 애플리케이션은 구조체 구조가 잘 정의되어 있기때문에 분석하는데 도움이 되더군요
vim + taglist, ctags 이면 코드 쫓아가는건 어느정도 수헐
vim + taglist, ctags 이면 코드 쫓아가는건 어느정도 수헐합니다.
일단 대략 소스로 추적하고 그 다음 디버거로 마무리..
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
디버깅 해보면서 함수 호출쪽을 살펴보시는게 빠를듯하네요.소스 잘 설명
디버깅 해보면서 함수 호출쪽을 살펴보시는게 빠를듯하네요.
소스 잘 설명해놓은 문서가 있다면 금상첨화구여.
그냥 소스만 보고 있다가는 어느새 졸음이 쏟아져서리.
CODE Reading : The Open Source Perspective
이책이 조금 도움이 될까 모르겠네요.코딩을 윈도우에서 하신다면 Source Insight (http://www.sourceinsight.com) 같은 툴들이
[/]굉장한 도움이 되죠. :D
디버깅 하면서 합니다.
해당 문서가 있다면 충분 히 읽어 봅니다. 정말 도움이 되겠죠...
그리고는 일단 잘 build 해서 해당 플래폼의 디버거로 흐름을 파악합니다. 프로그램의 역할이 어떤가 에 따라서 파악 하고 싶은 부분 중심으로 조사를 합니다.
tagging 만 해서 파악하기에는 힘들더라구요...
source insight 라는 프로그램을 사용할 때도 있습니다.
source insight 라는 프로그램을 사용할 때도 있습니다.
visual c++ 8 에서 이 기능들이 일부 도입되어서
소스 분석하기에 편해졌더군요...
UNIX계열에서는 사용할 수 없으니;; 도움이 안되는 답글이 될듯합니다;;
일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.
잘~ 하면 됩니다.
잘~ 하면 됩니다.
저도 vim + taglist, ctags ctrl+]를 눌렀을때 엉뚱한곳
vim + taglist, ctags 를 사용하고 있는데요
ctrl+] 를 누르면 제대로 찾아가는 경우도 있는데
엉뚱한 곳으로 찾아가는 경우도 많더라구요
다른 분들은 이런 문제 없으신가요?
그리고 한가지 필요한 기능이 있는데
제가 모르는 건지
어떤 함수가 있을때 이 함수를 호출하는 리스트를 보려면
[ + I를 누르면 되는데
그 목록중 하나로 쫓아가는 간단한 방법이 없을까요?
@.@
Re: 소스코드 분석할때 어떤식으로 하시나요?
요령도 중요하겠지만, 많은 시간 동안 많은 것을 만들어보고,
남의 소스도 읽어보고, 즉 시간을 투자해야 분석하는 감을
얻을 수 있다고 봅니다.
어느 선에 도달하면 무엇을 봐야 할지, 무슨 소스에 무엇이
있을 지 감이 오게 됩니다. 그것을 편하게 하는 툴은 그 다음이죠.
뭐 툴은 없으면 노트 패드라도 써야 하는 거 아닌가요? :wink:
프로그램 언어도 결국 언어라서, 소스를 읽고 이해하는 건
책을 읽고 그 내용을 이해하는 것과 비슷합니다. 많은 경험이
최고죠.
Orion Project : http://orionids.org
Re: 소스코드 분석할때 어떤식으로 하시나요?
좋은 답변 감사합니다. 제가 너무 쉬운길만 찾으려고 했던것 같습니다. :oops:
======================
BLOG : http://superkkt.com
Re: 저도 vim + taglist, ctags ctrl+]를 눌렀을때 엉뚱한곳
ifdef 등으로 인해 다른 정의쪽을 탄다면 ctags 호출할때 상수등을
정의할 수 있습니다.
[ Tab 혹은 숫자 [ Tab 하면 됩니다.
아니면 [ I 눌렀을때 나오는 라인번호를 :라인번호 형태로 쳐두
됩니다.
[ I 는 현재 커서가 있는 keyword가 발견되는 부분을 찾는걸로
알고 있습니다만.. 전 함수보다는 변수나 타입 정의를 찾을때 편하
게 이용합니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
음.. 아직 큰 프로그램을 분석해본 적은 없어서..그냥, 새로 프로젝
음.. 아직 큰 프로그램을 분석해본 적은 없어서..
그냥, 새로 프로젝트 열고는
상대방 프로그램을 모듈별로 copy&paste해서 테스트 해봅니다.. =_=;;
(일명 "divide&conquer" <= 나폴레옹의 전략)
잠깐 딴이야기로.
혹자는 "/* */"를 써서 소스의 일부분을 주석 처리하고 하면 되지 않겠냐 하시는데
다른 분들 소스를 보다보면 쓸데없이 "/* */"을 남발해서 주석 처리가 힘들더군요.
("/* */"은 중첩될 수 없죠...)
그리고 저는 왠만하면 "//" 주석을 쓰고
모듈 단위론
이렇게 씁니다.
2005년 12월 1일.
[quote="어니스트"]잠깐 딴이야기로.혹자는 "/* */"를 써서
코드의 일부를 주석처리하는 효과를 얻으려면 이런 방법도 있습니다.
저도 #if 0 을 주로 사용합니다./* 나 // 하긴 귀찮을때가
저도 #if 0 을 주로 사용합니다.
/* 나 // 하긴 귀찮을때가 많죠 ..
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
생각난 것을 추가로 적어봅니다.UML의 static class d
생각난 것을 추가로 적어봅니다.
UML의 static class diagram을 자동으로 그려주는 툴들이 몇가지 나와있습니다.
rational rose 나 visio, doxgen 등이 그것입니다.
개인적으로.... 소스 분석은 UML로 하는 것이 그나마 가장 빠르고 효과적이라고.. 생각하고 있습니다..
일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.
#if는...
#if 0 ... #endif 를 사용하더라도 안에 들어있는 부분은 문법에 합당해야 합니다.
신성국(cinsk) 님께서 C FAQs 번역에 깔끔하게 써주셨더군요.
아마 9장 Preprocessor Macros 인가? 일 겁니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
Re: #if는...
아닙니다. 문법은 전처리기가 상관할 일이 아니죠. 물론 전처리 지시어 자체의 문법은
지켜야 하지만요. 다음 코드는 깨끗하게 컴파일 됩니다.
Re: #if는...
그렇긴 한데, editor가 중소괄호나 if, while등 loopmatching에 실패하는 경우가 있잖습니까?
논리적으로 말도 안되는 코드가 if 0 block안에 nest되더라도 그 nesting만큼은 if 0 밖의 code와 수미쌍응해줘야 code보는데 덜골치아프더군요. %가 무용지물이 되어버리는 맘아픈 상황에 직면하지 않으려면요... 8)
--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)
Re: #if는...
전처리 과정은 토큰화 과정 바로 다음에 일어 납니다. 문법에 합당할 필요는 없습니다. 단, (이건 제가 제대로 알고 있는 건지 장담은 못 하겠는데) 잘못된 토큰이 있을 경우 토큰화 과정에서 에러가 날 가능성이 있습니다.
- 토끼군
함수 호출 경로 등, 소스를 정리할때는freemind 이라는 마인드맵
함수 호출 경로 등, 소스를 정리할때는
freemind 이라는 마인드맵 툴을 사용합니다.
원래 소스 정리하라고 이 툴이 생긴거는 아니지만,
쓸만하더군요.
http://freemind.sourceforge.net/
[b]wakeup[/b]
wakeup
댓글 달기