심볼파일(symbol file), pdb, map 파일이란?

심볼파일(symbol file) 이란?

 

 

어플리케이션, 라이브러리, 드라이버 혹은 운영체제의 링킹(Linking) 작업이 이루어질 때,

.exe와 .dll 파일을 생성하는 linker는 많은 수의 symbol 파일이라고 알려진 부가적인 파일을 만들어냅니다

symbol 파일은 바이너리가 실행될 때 꼭 필요하진 않지만

디버깅 과정에서 아주 유용하게 사용되는 다양한 정보를 가지고 있습니다

보통 symbol 파일은 다음 정보들을 포함한다

* 전역 변수
* 지역 변수
* 함수 이름과 entry point의 주소
* FPO data
* Source-line 번호

exe와 pdb는 잘 보관해야합니다

이 둘은 페어로 잃어버리면 안됩니다



바이너리는 이러한 심볼 파일들을 분리해서 유지함으로서 사이즈가 작고 빨라집니다

하지만 이것은 디버깅을 할 때 디버깅을 하려는 바이너리와 심볼 파일이 일치하는지 확인하는 작업을 거칩니다

interactive 디버깅과 크래쉬 덤프에 대한 디버깅 모두 심볼파일이 필요합니다

디버깅을 하기 위해서는 디버깅을 하려는 코드에 대한 정확한 심볼을 구해야 하고,

이것을 디버거에 로드해야 합니다

 

pdb 심볼파일 (Program DataBase)

비주얼 코드일 경우 debug 빌드 시 자동으로 생성됩니다

프로그램 데이터베이스 파일(C#, F# 및 Visual Basic)

프로그램 데이터베이스 파일(C#, F# 및 Visual Basic) 08/10/2011 읽는 데 3분 걸림 이 문서의 내용 --> 업데이트: 2011년 3월 이 항목은 다음 언어에 적용됩니다. PDB(프로그램 데이터베이스) 파일에는 프로

docs.microsoft.com

WinDbg 심볼파일 로드
마이크로소프트는 심볼파일을 웹심볼이라는 형태로 제공해 줍니다

SRV*E:/OsSymbols*http://mdsl.microsoft.com/download/symbols;E:\MySymbols

 

SRV 심볼 서버를 입력
|
심볼파일 경로
|
웹심볼 URL
|
심볼파일을 모아둔 경로 설정

 

 

 

WinDbg 에서 File > Symbol File Path

 

 

.pdb 파일이 심볼파일
.exe 파일이 실행파일

 

 

 

windbg로 디버깅 할 수 있는 파일입니다

pdb파일이 유출된다면 변수, 함수 등에 대한 정보가 상당히 노출되게 됩니다

거의 소스코드를 까본다고 보시면 됩니다

WinDbg로 심볼 정보를 로드하게 되면 볼 수 있습니다

map 파일

map파일은 디버깅이 불가능하거나 심볼 정보를 확인할 수 없는 경우 사용합니다

댓글

Designed by JB FACTORY