Dependency Walker는 무엇에 쓰이는 물건일까?

@codemaru · August 09, 2010 · 5 min read

Dependency Walker는 모듈의 의존성 정보를 알아내는 도구다. 비주얼 스튜디오(Visual Studio) .NET 2003 버전을 사용한다면 설치 디렉터리 밑에 Common7\Tools\Bin 디렉터리에서 depends.exe를 실행하면 된다. 자주 사용하는 유틸리티이기 때문에 바탕화면이나 시작 메뉴 등에 등록해 놓고 사용하면 편리하다. 혹시 depends.exe가 없다면 홈페이지(http://www.dependencywalker.com)에서 최신 버전을 다운로드 받으면 된다. 캡처한 화면은 Dependency Walker를 실행해서 MFC71.dll을 불러온 화면이다.

Dependency Walker는 말 그대로 의존성을 검사하는 도구다. 직접 만든 실행 파일(EXE) 내지는 동적 연결 라이브러리를(DLL) 구동하는데 필요한 파일이 무엇인지 체크 하는 도구라고 생각하면 된다. 개발자 컴퓨터에서 잘 동작하던 실행 프로그램이 다른 곳에 설치하면 DLL이 없다면서 실행이 되지 않는 문제가 종종 발생하곤 한다. 이러한 경우에 어떤 DLL들이 필요한지 살펴보고 그것들을 같이 배포해야 문제가 발생하지 않는다. 하지만 DLL을 제작하는 프로젝트 내에서 직접 어떤 라이브러리를 가져다 썼고 어떤 것들을 같이 배포해야 하는지 찾기란 쉬운 작업은 아니다. 그런 작업을 한눈에 보기 쉽게 해주는 것이 Dependency Walker의 역할이다.

위의 캡쳐 화면을 보면 화면이 총 다섯 개의 부분으로 분할된 것을 알 수 있다. 그럼 지금부터 각각의 영역이 어떠한 것을 의미하는지 살펴보도록 하자. 위에서 아래로 왼쪽에서 오른쪽으로 살펴보자.

왼쪽 위에 있는 영역은 현재 열려있는 파일과 의존 관계에 있는 파일들을 표시하는 창이다. 지금 MFC71.DLL을 열어둔 상태이므로 가장 위쪽에 MFC71.DLL이 표시되어 있다. 트리 구조에서 그것의 자식으로 표시된 DLL들이 MFC71.DLL을 구동하기 위해서 필요한 DLL임을 알 수 있다. MSVCR71.DLL, KERNEL32.DLL, GDI32.DLL등이 필요함을 알 수 있다. 그런 자식 DLL을 클릭하면 자식 DLL을 구동하는 데 필요한 DLL이 표시된다. 모듈을 선택한 후 엔터 키를 누르면 해당 모듈을 다시 별도의 Dependency Walker 창에서 불러와서 표시해 준다.

오른 쪽으로 붙어 있는 창에는 왼쪽에서 선택한 DLL(MSVCR71.DLL)에서 MFC71.DLL이 임포트 해서 사용하고 있는 함수 목록이 나타나 있다. C라고 나와 있는 것은 C타입의 함수라는 의미다. 옆에 있는 Ordinal 칼럼은 함수가 Ordinal에 의해서 링크 되었는지를 표시한다. N/A라고 표시된 것은 이름에 의해서 링크 되었다는 의미다. 다음에 나타나 있는 Hint는 해당 함수에 대한 힌트 값으로 운영체제 내부적으로 사용된다. 그 옆에 나타나 있는 Function은 함수의 이름을 나타낸다. C++ 함수인 경우 오른쪽 버튼을 눌러 Undecorate C++ Functions를 선택하면 이름 장식(mangling)된 것을 해제한 원형을 표시해 준다.

그 창 아래 있는 것은 왼쪽에서 선택한 DLL(MSVCR71.DLL)에서 익스포트 하고 있는 함수 목록이다. 각 칼럼은 함수 익스포트 타입, Ordinal, Hint 값, 함수 이름, Entry Point를 나타낸다. 이 창과 위에 있는 창에서는 함수를 선택하고 엔터 키를 누르면 해당 함수의 도움말 페이지가 열린다.

캡쳐한 화면은 사용된 모듈들의 세부 정보를 나타낸다. 파일 크기, 속성, 버전과 같은 개별 파일에 대한 세부 정보를 확인 할 수 있다. 이 창을 통해서 우리가 알 수 있는 정보는 MFC71.DLL을 배포할 때에는 MSVCR71.DLL도 같이 배포해야 함을 알 수 있다. 아래쪽으로 죽 나타나 있는 DLL들은 전부 시스템 기본 DLL 이기 때문에 별도로 배포할 필요가 없다.

 0  0

 

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중