1. What is a debug symbol?

Generated by linker.

링커에 의해 만들어졌다.

 

Have PDB extensions.

PDB 확장자를 가지고 있다.

 

Mainly contains type details, function details.

주로 유형 세부 정보, 기능 세부 정보를 포함합니다.

 

Contains a subset of information which is there in the source code.

소스 코드에 있는 정보의 하위 집합을 포함합니다.

 

Contains information about stack frame size, optimization information in some cases.

경우에 따라 스택 프레임 크기, 최적화 정보에 대한 정보가 들어 있습니다.

 

Not needed for running the binary.

binary 실행에는 필요하지 않습니다.

 

Needed for debugging to understand what is what.

무엇이 무엇인지 이해하기 위해 디버깅에 필요합니다.

Why we Need Symbols?

Binary generated by linker does not have any variables or function name information.

링커에서 생성 된 바이너리에는 변수 나 함수 이름 정보가 없습니다.

 

Debugging is all about looking at run time memory of an OS or application

디버깅은 OS 또는 응용 프로그램의 모든 런타임 메모리를 조사하는 것입니다.

 

Memory does not have any symbol information (name of variable or function etc.)

메모리에는 기호 정보 (변수 또는 함수 이름 등)가 없습니다.

 

Debugger needs symbols to translate the address to names.

디버거에는 주소를 이름으로 변환하는 기호가 필요합니다.

I am debugging with Visual Studio for ages and never care about symbols why Now?

나는 Visual Studio로 디버깅을하고 있으며 왜 심볼을 신경 쓰지 않았는가?

 

  • Visual studio always create pdb in the same folder as the binary.
  • Visual Studio는 항상 이진 파일과 동일한 폴더에 pdb 파일을 만듭니다.
  • So it will automatically load the pdb at the time of debugging.
  • 따라서 디버깅 할 때 pdb가 자동으로 로드됩니다.

Is pdb has something to do with debug builds?

pdb가 디버그 빌드와 관련이 있습니까?

 

  • No. Pdb is part of the release build as well.
  • 아닙니다. Pdb는 릴리스 빌드의 일부이기도합니다.
  • In face it is more important you keep the pdbs for a production release version such that it can be used in production issues.
  • 생산성 문제에 사용될 수 있도록 프로덕션 릴리스 버전에 대한 pdbs를 유지하는 것이 더 중요합니다.

PDB

  • Program database
  • Format is undocumented.
  • Can be accessed via debugger Interface Access SDK from MSDN
  • MSDN에서 디버거 Interface Access SDK를 통해 액세스 할 수 있습니다.

https://docs.microsoft.com/ko-kr/visualstudio/debugger/debug-interface-access/debug-interface-access-sdk?view=vs-2015

 

Microsoft symbols

  • Pdb file for microsoft binaries like ntoskrnl, ntdll, hal etc.
  • ntoskrnl, ntdll, hal 등의 microsoft 바이너리 용 Pdb 파일
  • Is stripped down and very less information and there for called "public symbols"
  • 정보가 제거되고 정보가 매우 적습니다. Public Symbols 이라 부른다.
  • Always function locals variable information and argument details missing.
  • locals 변수 정보와 인수 세부 정보가 항상 누락되었습니다.
  • Some of the symbols has some global variable's type information.
  • 일부 기호에는 글로 z 변수의 유형 정보가 있습니다.
  • Needed for some (in fact most of the) commands to work and shows the Microsoft part of the stack correctly
  • 일부 명령 (실제로는 대부분)이 작동해야 하며 스택의 Microsoft 부분이 올바르게 표시되어야 합니다.
  • Path is http://msdl.microsoft.com/download/symbols

Demo

  • Setting symbol path.
  • Understanding the difference.
  • ln and x commands
  • lmvm to see if symbols are loaded.
  • sympath
  • symfix

File - Symbol File Path 클릭하면,

Default 설정된 값이 없습니다.

Notepad 실행한 Attach Process 진행

Notepad - OK

아래와 같이 확인

참고로 windbg 에서 사용하는 명령어는 살펴보는게 좋습니다.

 

아래의 블로그에서 보기 좋게 정리되어 있네요. 참고하시기 바랍니다.

https://darpangs.tistory.com/entry/WinDbg-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC-1

https://thepassion.tistory.com/114

0~7 Thread 정보가 호출됩니다.

~0s - 0 Thread 현재 Thread 설정합니다.

 

k Stack 보기

영상에서는 Symbol 지정되어 있지 않으면 아래와 같이 나타난다고 합니다.

Symbol 지정해 보겠습니다.

상단의 File Symbol file Path

아래의 값을 입력

srv*c:\websymbols*http://msdl.microsoft.com/download/symbols -> Microsoft symbol

.reload Symbol 다시 불러오는 명령어

Symbol 불러온 상태에서 Stack 확인

lmvm notepad

lmvm - execute information binary

 

PDB File location

.sympath
- Symbol location

x 특정 모듈의 Symbol 표시

X notepad!winmain

x notepad!*Main* -> Wildcard 문자 사용

ln 해당 주소에 근접한 심볼의 정보 표시

'Windbg' 카테고리의 다른 글

5. Introduction to debugger Commands  (0) 2019.04.07
4. Troubleshooting Symbols mismatch  (0) 2019.04.07
3. Introduction To debug Symbols  (0) 2019.04.07
2. Different Modes Of Operations of Windbg  (0) 2019.03.10
Windbg. Network Kernel Debugging  (0) 2019.03.10
1. THE Debugger  (0) 2019.03.10

+ Recent posts