ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Windows Kernel Symbol(pdb file)
    Tools/Windows 2021. 9. 14. 23:06

    pdb파일을 받을 수 있는 방법은 많다.

    직접적으로 Request를 보내 받아오는 방법도 있고(https://github.com/ajkhoury/pdbfetch),

    IDA Pro는 인터넷이 연결되어있으면 사용자에게 물어보고 알아서 받아오기도 한다.

    Kernel Debugging을 할 때도 직접 받을 수 있는데, 너무 쉽고 당연해서 그런지 정리글이 없다.

    Kernel Debugging 환경이 있을 때, windbg(kd)를 통해 받는 방법이다.


    1. Symbol Path 설정

    .sympath srv* C:\symbols*https://msdl.microsoft.com/download/symbols

    위 명령어를 이용해 심볼을 저장할 path를 설정한다.

     

    혹은 Ctrl+S를 눌러 Symbol Search Path창을 띄운 뒤 Symbol path를 등록한다.

    Reload 버튼을 누르고 OK를 눌러도 되고, 저장한 뒤 .reload 명령어를 실행해도 된다.

    SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

     

    혹은 다음과 같은 한 번의 명령어로 처리할 수 있다. (.symfix C:\symbols)

     

     

    2. 명령어를 통해 심볼 다운로드

    커널 디버깅 상태에서 다음과 같이 windbg의 lm 명령어를 통해 로드된 모듈을 확인할 수 있다.

     

     

    디버깅을 하다보면 알아서 심볼을 받아오겠지만, 때에 따라 pdb파일만 필요한 경우가 있을 수 있다.

    그럴때는 여러가지 명령어들 중 적당한 명령어를 사용해서 심볼을 다운받게 강제하면 된다.

    대표적으로 "x /D win32kfull!" 와 같은 명령어가 있다.

     

    위 windbg의 로그 내용과 같이 심볼을 다운받게 되고, 다운받은 심볼은 .symfix로 설정한 곳에 저장된다.

     

    lm 명령어를 통해 다시 확인해보면 아래와 같이 pdb symbol이 로드된 것도 확인할 수 있다.

     


    3. 문제 및 해결

    커널 디버깅 시, 심볼을 설정하는데 문제가 생기면 다음과 같은 방법으로 문제가 있는지 확인해본다.

    1. sympath가 설정 확인
    Ctrl+S -> SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

    2. 로그를 통해 문제점 파악

    !sym noisy
    .reload /f win32kbase.sys


    위와 같은 방법으로 테스트 했을 때, u나 dd와 같은 명령어를 써서 win32kbase가 매핑된 메모리를 확인해보면

    정상적으로 출력이 되지 않고 ??????가 출력되는 상황이 있다. (참조 링크)

    이는 다음과 같은 명령어들을 통해 쉽게 해결할 수 있다.(참조 링크)

    !process 0 0 explorer.exe
    PROCESS ffff81882b174340
        SessionId: 1  Cid: 0d7c    Peb: 00223000  ParentCid: 0d5c
        DirBase: 2b11c002  ObjectTable: ffffc28df63918c0  HandleCount: 2062.
        Image: explorer.exe
    .process /r /P ffff81882b174340
    .reload win32kbase.sys

     

     

Designed by Tistory.