Symbol 을 확인하는데 사용하는 SymChk

[SymChk]
SymChk 는 Microsoft 의 Symbol Checker tool 이다. executable file 이 올바른 Symbol 을 가지고 있는지 확인합니다.
고객 site 에 방문해야 하는데 symbol 정보를 공유폴더나 Web 을 통해서 얻을 수 없을 경우 정확히 이야기 하면 해당 Symbol 을 Srv 를 통해서 받을 수 없고 Local 에 모두 가지고 있어야 하는 경우 해당 Symbol 을 모두 받기 위한 용도로 사용합니다.

 

기본 사용법은 다음과 같습니다.

symchk [/r] FileNames /s SymbolPath

FileNames 에는 여러개의 File 을 설정할 수 있다. /r 이 사용되면 하위 디렉토리도 설정 가능합니다.
SymbolPath 에는 Local 디렉토리와 UNC 경로, Symbol Server가 가능하나 UNC 나 Local 디렉토리는 하위폴더를 검사하지 않습니다.

symchk thisdriver.sys /s g:\symbols

g:\mysymbols and g:\mysymbols\sys 를 찾을 것입니다.

symbol path 에 설정하여 심볼서버를 설정하는 것도 가능합니다.

srv*DownstreamStore*\\Server\Share
srv*\\Server\Share

 

이 예제는 debugger 의 symbol path 를 사용하여 symbol server 를 설정하는 것과 비슷합니다.

downstream store 가 설정되어 있으면 SymChk 는 올바른 Symbol file 들을 downstream store 에 복사할 것입니다.

예)

C:\Program Files\Debugging Tools for Windows>symchk.exe f:\myapp.exe /s f:\symbols\applications

SYMCHK: Myapp.exe           FAILED  - Myapp.pdb is missing

SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0

 

다른 path 를 사용해서 다시 한번 더 실행

C:\Program Files\Debugging Tools for Windows>symchk.exe f:\myapp.exe /s f:\symbols\newdirectory

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

두번째 시도에서 성공하였다. 첫번째 symbol path 에서 일치하는 symbol 을 찾지 못하였고 두번째 시도에서 찾았습니다. /r 명령을 사용하면 디렉토리 하위의 파일들에 대해서 symbol check 가 가능합니다.

 

C:\Program Files\Debugging Tools for Windows>symchk.exe symchk /r c:\windows\system32 /s srv*\\manysymbols\windows

SYMCHK: msisam11.dll         FAILED  - MSISAM11.pdb is missing
SYMCHK: msuni11.dll          FAILED  - msuni11link.pdb is missing
SYMCHK: msdxm.ocx            FAILED  - Image is split correctly, but msdxm.dbg i
s missing
SYMCHK: expsrv.dll           FAILED  - Checksum doesn't match with expsrv.DBG
SYMCHK: imeshare.dll         FAILED  - imeshare.opt.pdb is missing
SYMCHK: ir32_32.dll          FAILED  - Built with no debugging information
SYMCHK: author.dll           FAILED  - rpctest.pdb is missing
SYMCHK: msvcrt40.dll         FAILED  - Built with no debugging information
......
SYMCHK: FAILED files = 211
SYMCHK: PASSED + IGNORED files = 4809

/v 명령을 사용하면 더 많은 정보를 볼 수 있다.

 

제가 ntoskrnl 에 대해서 실행해 보았더니 아래와 같은 결과가 나왔습니다.

C:\Program Files\Debugging Tools for Windows>symchk.exe c:\WINDOWS\system32\ntoskrnl.exe /s https://msdl.microsoft.com/download/symbols

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

C:\Program Files\Debugging Tools for Windows>symchk.exe /v c:\WINDOWS\system32\ntoskrnl.exe /s https://msdl.microsoft.com/download/symbols
[SYMCHK] Searching for symbols to c:\WINDOWS\system32\ntoskrnl.exe in path https://msdl.microsoft.com/download/symbols
DBGHELP: Symbol Search Path: https://msdl.microsoft.com/download/symbols
[SYMCHK] Using search path "https://msdl.microsoft.com/download/symbols"
DBGHELP: No header for c:\WINDOWS\system32\ntoskrnl.exe.  Searching for image on disk
DBGHELP: c:\WINDOWS\system32\ntoskrnl.exe - OK
DBGHELP: ntoskrnl - public symbols
         C:\Program Files\Debugging Tools for Windows\sym\ntkrnlmp.pdb\AA1EE1B2A63A4232A379F3EFDDC4CFE82\ntkrnlmp.pdb
[SYMCHK] MODULE64 Info ----------------------
[SYMCHK] Struct size: 1672 bytes
[SYMCHK] Base: 0x00400000
[SYMCHK] Image size: 2252800 bytes
[SYMCHK] Date: 0x42250f77
[SYMCHK] Checksum: 0x0020ec2b
[SYMCHK] NumSyms: 0
[SYMCHK] SymType: SymPDB
[SYMCHK] ModName: ntoskrnl
[SYMCHK] ImageName: c:\WINDOWS\system32\ntoskrnl.exe
[SYMCHK] LoadedImage: c:\WINDOWS\system32\ntoskrnl.exe
[SYMCHK] PDB: "C:\Program Files\Debugging Tools for Windows\sym\ntkrnlmp.pdb\AA1EE1B2A63A4232A379F3EFDDC4CFE82\ntkrnlmp.pdb"
[SYMCHK] CV: RSDS
[SYMCHK] CV DWORD: 0x53445352
[SYMCHK] CV Data:  ntkrnlmp.pdb
[SYMCHK] PDB Sig:  0
[SYMCHK] PDB7 Sig: {AA1EE1B2-A63A-4232-A379-F3EFDDC4CFE8}
[SYMCHK] Age: 2
[SYMCHK] PDB Matched:  TRUE
[SYMCHK] DBG Matched:  TRUE
[SYMCHK] Line nubmers: FALSE
[SYMCHK] Global syms:  FALSE
[SYMCHK] Type Info:    TRUE
[SYMCHK] ------------------------------------
SymbolCheckVersion  0x00000002
Result              0x00130001
DbgFilename
DbgTimeDateStamp    0x42250f77
DbgSizeOfImage      0x00226000
DbgChecksum         0x0020ec2b
PdbFilename         C:\Program Files\Debugging Tools for Windows\sym\ntkrnlmp.pdb\AA1EE1B2A63A4232A379F3EFDDC4CFE82\ntkrnlmp.pdb
PdbSignature        {AA1EE1B2-A63A-4232-A379-F3EFDDC4CFE8}
PdbDbiAge           0x00000002
[SYMCHK] [ 0x00000000 - 0x00130001 ] Checked "c:\WINDOWS\system32\ntoskrnl.exe"

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1