"[windbg] windbg 사용하기, 덤프 분석하기"
1. 덤프를 읽을 심볼과 심볼에 맞는 소스코드 경로를 연결시킨다.
2. 덤프를 windbg에 드래그 드롭 또는 open으로 파일을 열면 이런 화면을 볼수 있다.
- Loading Dump File : 덤프 파일의 위치, 덤프 종류
- Executable search path is : 덤프가 발생한 OS
- Debug sesstion time : 덤프 발생 시점 시간
- Process Uptime: 부팅 이후 동작한 시간
3. !analyze -v 명령어 실행
!analyze-v 명령어를 실행하면 더욱 자세하게 덤프 내용이 나온다.
FAULTING_IP: 어떤 부분에서 문제가 일어났는지 표시한다. callstack의 마지막 부분이다.
KERNRLBASE.ddl에서 문제가 발생했으며 [ esp+54h ]의 주소가 가리키는 4바이트(Dword)인 어떤 값을 ecx에 복사하다가 문제가 발생했음. 이라고 해석이 된다. 하지만 Kernelbase는 windows자체 시스템 구성 요소를 잘못 사용하거나 할 때 자주 발생하므로 라이브러리를 잘못쓴게 없는지 보는게 중요하다.
STACK_TEXT: 문제가 일어난 시점으로 가는 callstack을 보여준다,
또한 여기서 추가로 알 수 있는 정보가 있다.
- 노란색 박스 - 스택 프레임 시작
- 핑크생 박스 - 리턴 주소
- 하늘색 박스 - 인자값: 뭔지 모르겠음
이런 한 주소를 사용하는 예시로 만약 오류가 발생한 함수의 위치가 다양하다면, [ kvn L=리턴주소 ] 명령어를 통해 어떤 곳으로 리턴하는지 확인할 수 있다.
4. .ecxr
덤프를 더욱 자세히 보자.
.ecxr 명령어: 현재 예외와 연결된 컨텍스트 레코드를 표시한다.
- 크래시 덤프(미니 덤프만 해당됨)
- 컨텍스트 레코드는 보통 CPU레지스터 셋(Register Set)을 의미한다.
5. ~*kbn, kvn L=주소
~*kbn : 모든 Threads의 정보를 보여준다.
kvn L=주소 : 원하는 주소의 콜스택을 볼수 있다.
더욱 자세히 보고 싶으면 -4씩 움직이면서 콜스택을 보자.
콜스택에서 빨간색 박스 - 시작 주소, 파란색 박스 - 리턴 주소이다.
6. u [주소] , r
u [주소] : 원하는 [주소] 어셈블러 볼수 있다
r : 현재 레지스터 정보를 표시해준다.
7. view를 활용하자.
,ecxr 명령어를 실행 후 [call stack] view와 [Loal] view를 오픈한다.
call stack에 나와 있는 함수들을 클릭하면 그 함수를 실행할 때의 Local 변수들이 나온다.
미니 덤프가 아닌 경우 Local 변수에 남아 있는 값을 보고 어떤 값으로 인해 덤프가 발생했는지 확인이 가능 하다.
실행 파일의 코드를 연결해두었다면, call stack을 더블클릭 했을 때 소스코드로 연결이 된다.
memory와 registers view를 통해 원하는 주소를 검색하면 메모리와 레지스터를 확인할 수 있다.
프로세스와 스레트 view은 현재 프로세스의 모든 스레드를 보여준다. 스레드 목록 중 다른 스레드를 더블클릭하면 windbg는 해당 스레드의 레지스터 컨텍스트로 변경되면서 스레드의 콜 스택을 보여준다.
'👨🏻💻 programming > ◽ 툴(tool)' 카테고리의 다른 글
(VCS) svn 사용 방법 익히기! (2) | 2022.12.31 |
---|---|
(Version Control System/VCS) 버전관리 시스템 (0) | 2022.12.29 |
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!