과목명 : 운영체제(Operating System)
수업일자 : 2023년 04월 05일 (수)
1. Various commands in WinDbg
(1) Kernel debugging을 위해 가상 머신의 Windows를 부팅하고, kernel prompt와 연결해서 debugging 준비를 완료합니다.
1-1. Command : kd > g
(1) Debugee의 Guest OS(Target OS)의 디버깅 모드를 중지하고 Target PC를 사용할 수 있게 됩니다.
(2) Target PC를 직접 사용할 수 있는 상태가 된 것을 확인할 수 있습니다.
1-2. Command : kd >
(1) Debugee PC가 Running 상태일 때 다시 Debugging mode로 전환할 수 있도록 WinDbg 최상단 메뉴에서 Debug → Break 항목을 클릭하면 아래와 같이 Debugging mode로 재진입하기 위한 콘솔 메시지가 출력됩니다.
(2) 현재 상태에서 스페이스 바(Space bar, 공백 추가)를 커맨드 라인에서 입력해 주고 Enter키를 눌러 Debugging mode로 재진입이 가능합니다.
(3) Debugging mode로 재진입한 메시지를 확인할 수 있습니다.
1-3. WinDbg Commands의 종류
(1) Regular commands (일반적인 명령)
- 디버깅하려고 하는 프로세스를 제어하는 명령입니다.
- Ex 1) kd> lm (로드된 모듈을 출력하고, 모듈의 상태와 경로가 표시됨)
- Ex 2) kd> bp (bp, bu 및 bm 커맨드는 하나 이상의 소프트웨어 중단점을 설정)
(2) dot commands (Dot 명령)
- WinDbg 커널 프로그램 자체를 제어하려고 하는 경우 사용할 수 있는 명령입니다.
- 커맨드 앞에 .(dot)을 붙입니다.
- Ex 1) kd> .sympath (Symbol 파일의 경로를 출력할 때 사용)
- Ex 2) kd> .process (프로세스에 대한 Context를 설정)
- Ex 3) kd> .hh (/help와 동일한 명령어)
(3) Extension commands (확장 명령)
- WinDbg 커널 프로그램의 기능을 확장하기 위해 외부 DLL을 구현하여 사용할 수 있는 명령입니다.
- Ex 1) kd> !process (지정된 프로세스 또는 EPROCESS 블록을 포함한 모든 프로세스에 대한 정보를 출력)
2. Examples of WinDbg commands Lab #1
2-1. kd> .sympath
- 설정한 Symbol의 경로(path)를 확인할 수 있습니다.
2-2. kd> lm
- 로드된 모듈을 출력하고, 모듈의 상태와 경로가 표시됩니다.
2-3. kd> g
- Target OS의 커널 디버깅 모드를 해제합니다.
2-4. kd> nt! (ntoskrnl.exe)
- 모듈 내부에 존재하는 모든 Symbol을 출력합니다.
2-5. kd> x nt!KeServiceDescriptorTable
2-6. kd> dd fffff806`4e21e8c0
- kd> dd : 메모리를 Double word 단위의 Dump memory 타입으로 출력해 줍니다.
2-7. kd> x nt!IoCreateFile
2-8. kd> g
- 이후에 다시 Target OS를 커널 디버깅 모드에서 해제합니다.
3. Examples of WinDbg commands Lab #2
3-1. kd> lm
- 로드된 모듈을 출력하고, 모듈의 상태와 경로가 표시됩니다.
3-2. kd> x kernel32!, kd> x ntdll!
- kd > x 커맨드의 경우 Symbol을 출력하는 커맨드입니다.
- 현재 상태에서는 Symbol이 출력되지 않습니다.
3-3. kd> !process 0 0 notepad.exe
- notepad.exe 프로세스에 대한 정보를 출력합니다.
3-4. kd> .process /p /r ffffb608848c5340
3-5. kd> lm
- kd> .process /p /r ffffb608848c5340 해당 커맨드를 적용한 이후 로드된 모듈을 출력하고, 모듈의 상태와 경로가 표시됩니다.
3-6. kd> x kernel32!
- 이전에 실행되지 않았던 Symbol이 출력됨을 확인할 수 있습니다.
3-7. kd> x ntdll!
- 이전에 실행되지 않았던 Symbol이 출력됨을 확인할 수 있습니다.
4. Examples of WinDbg commands Lab #3
4-1. kd> u IoCreateFile
4-2. kd> bp IoCreateFile
- bp : 특정 지점에서의 Break point를 설정할 수 있습니다.
4-3. kd> bl
- bl : Break point의 리스트를 출력합니다.
4-4. kd> g, kd> k
- kd> g : Target OS의 커널 디버깅 모드를 중지하며, 해당 Break point 지점을 보여주고 있습니다.
- kd> k : 스택(Stack) 영역을 확인하기 위한 커맨드입니다.
4-5. kd> bc *
- 모든 Break point를 제거할 수 있는 커맨드입니다.
(1) kd> bc * 커맨드 적용 이전 Break point를 확인할 수 있었습니다.
(2) kd> bc * 커맨드 적용 이후 Break point 지점이 모두 제거되었습니다.
5. WinDbg Commands related to Symbol information
5-1. kd> .sympath
5-2. kd> .sympath+
5-3. kd> .reload
- Kernel symbols, User symbols, 로드되지 않은 모듈 리스트를 불러오는 커맨드입니다.
5-4. kd> .symfix c:\WinDDK\Symbols
- 지정된 경로로 기존에 설정되어 있던 Symbol path를 재설정하는 커맨드입니다.
(1) kd> .symfix c:\WinDDK\Symbols 커맨드 적용 이전의 Symbol path입니다.
(2) kd> .symfix c:\WinDDK\Symbols 커맨드 적용 이후의 Symbol path가 변경된 것을 확인할 수 있습니다.
6. To check Symbol
6-1. kd> !process - 1 0
6-2. kd> !process 0 0
- 해당 커맨드 적용 이후 Ctrl + F 단축키로 notepad.exe 프로세스를 빠르게 탐색합니다.
6-3. kd> !process 0 0 notepad.exe
6-4. kd> .process /i ffffb608848c5340, kd> !peb
- kd> .process /i : 특정 프로세스의 Context로 이동합니다.
- kd> !peb : 해당 커맨드의 경우 프로세스에 대한 정보들이 출력됩니다. 프로세스에 대한 정보를 담고 있는 구조체로 볼 수 있습니다.
6-5. kd> g
6-6. kd> lm
6-7. kd> x kernel32! (kernel32.dll)
6-8. kd> x ntdll! (ntdll.dll)
6-9. kd> x nt! (ntoskrnl.exe)
7. Symbols in ntoskrnl.exe
7-1. kd> x nt!
7-2. kd> dd 80552fa0, kd> u 805c938a
- kd> u : 메모리에 지정된 프로그램 코드의 Assembly 변환값을 표시합니다.
- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
'컴퓨터 과학(Computer Science) > 운영체제(Operating System)' 카테고리의 다른 글
[7주 차] - Process Management (2) (0) | 2023.04.25 |
---|---|
[6주 차] - Process Management (1) (0) | 2023.04.25 |
[4주 차] - Windows Debugging 개요, Kernel Debugging을 위한 WinDbg, Windows 가상 환경 구성하기 (0) | 2023.04.05 |
[3주 차] - Segment, 80386 CPU의 여러 가지 특징, Running modes(Real mode, Protected mode) (0) | 2023.03.30 |
[2주 차] - 운영체제와 임베디드 운영체제, Intel 8086 CPU Architecture (0) | 2023.03.16 |
댓글