반응형

WinDbg는 타임스템프가 일치하지 않으면 심볼 파일을 로드하지 않는다. 모듈과 심볼이 일치하지 않아 정보가 정확하지 않을 수 있기 때문이다. 정확한 심볼을 구할 수 없다면 타임스템프가 다르더라도 가지고 있는 심볼을 강제 로드할 수 있다.

 

MyDrv모듈의 심볼이 없다. (Timestamp: Jun 10 2018 22:15:07)

 

심볼 파일을 확인해 보니 날짜가 다르다. 그래서 자동으로 로드되지 않았던 것이다.

 

.reload 명령어에 /i 옵션을 주고 심볼을 로드한다.

  • /i: 타임스템프를 무시한다.
  • 모듈 시작 주소: 9afd0000
  • 모듈 크기: 9afd7000 - 9afd0000 = 7000

이미지를 찾을 수 없다는 Win32 에러(0x2)가 나타나지만 무시한다.

Win32 Error Codes

 

다시 모듈을 확인해 보면 심볼이 로드되어 있다.

 

 

스텍 프레임에도 반영되어 표시된다.

물론 타임스템프가 다르기 때문에 정확한 정보를 표시하지 못할 수 있다.

 

이번엔 심볼 파일을 찾지 못하는 경우 어떻게 해결할 수 있는지 확인해 보자.

위 상황과는 약간 다르다. 같은 에러 메세지가 나타났지만 이번엔 정말 심볼을 로드하지 못한 것이다. 어떤 이유에 의해 심볼 파일의 경로가 바뀌거나 삭제되는 경우 심볼 파일을 찾지 못하게 된다.

 

WinDbg가 어떤 경로를 헤매고 다녔는지 얘기할 수 있게 해주자.

※ 다시 말할 수 없게 하려면 '!sym quiet'를 실행한다.

 

다시 한 번 .reload... 명령어를 실행하면 실패한 검색 경로가 모두 표시된다.

 

 

WinDbg가 원하는 검색 경로를 만들고 심볼 파일을 넣어준 후 심볼을 로드하면 해결된다.

 

2023.04.29 - [Reverse Engineering] - WinDbg 설치 하고 심볼 경로 설정하기(feat. 심볼 강제 로드)

 

반응형
Posted by J-sean
:
반응형

프로그램의 어떤 함수가 컴퓨터 CPU 자원을 독점하는지 찾아보자.

 

프로세스 익스플로러를 실행한다.

 

Options - Configure Symbols... 를 선택한다.

 

Dbghelp.dll 경로와 분석할 프로그램 Symbols 경로를 지정한다.

 

CPU 자원을 많이 소비하고 있는 프로세스를 찾는다.

 

 

우클릭 - Properties... 를 선택한다.

 

Threads 탭을 선택하고 CPU를 많이 사용하는 스레드를 찾아 선택하고 Stack 버튼을 클릭한다.

 

ThreadFunc2 함수가 실행되고 있음을 확인한다.

 

ThreadFunc2()

 

반응형
Posted by J-sean
:
반응형

x32/x64 디버거에서 심볼파일(pdb)을 불러오자.

 

디버깅할 프로세스를 불러온다.

 

심볼파일을 불러온다.

symload module_name, path

 

심볼파일이 존재하면 완료 메세지가 뜬다.

 

심볼 윈도우에서 모듈을 선택하고 심볼을 확인한다.

만약 프로그램 파일이 존재하는 디렉토리에 심볼파일이 같이 존재하면 자동으로 로드된다.

 

※ 참고

symload/loadsym

symunload/unloadsym

 

반응형
Posted by J-sean
:
반응형

아래 링크를 참조해 WinDbg를 설치한다.

Windows 디버거 설치

 

WinDbg를 실행하고 Settings를 클릭한다.

 

Debugging settings - Debugging paths - Default symbol path:에 위와같이 세팅한다.

심볼 파일이 디버깅 할 파일과 같은 경로에 있거나 path에 지정한 경로(I:\windbgsymbols)에 있으면 된다.

※ 기본 심볼 서버: https://msdl.microsoft.com/download/symbols

※ 기본 캐시 폴더: C:\ProgramData\dbg

 

Symbol path for Windows debuggers

 

디버깅할 파일을 로드하면 관련 심볼 파일도 로드된다.

 

심볼파일(.pdb)을 로드할 때 WinDbg는 타임 스템프 등을 고려한 버전 체크를 하는데 버전이 맞지 않으면 로드하지 않는다. 아래 명령을 사용하면 심볼파일의 버전에 관계없이 로드할 수 있다.

[한 모듈의 심볼파일만 로드]

.reload /i Module_Name

ex) .reload /i myapp.exe

[모든 모듈의 심볼파일 로드]

.reload /i

 

2023.07.02 - [Reverse Engineering] - WinDbg 버전(타임스템프) 일치하지 않는 심볼파일 로드하기

 

반응형
Posted by J-sean
: