본문 바로가기
컴퓨터 과학(Computer Science)/운영체제(Operating System)

[4주 차] - Windows Debugging 개요, Kernel Debugging을 위한 WinDbg, Windows 가상 환경 구성하기

by TwoJun 2023. 4. 5.

    과목명 : 운영체제(Operating System)

수업일자 : 2023년 03월 29일 (수)

 

 

 

 

 

1. Debugging in Windows OS

Debugging in Windows Operating System

1-1. Programming in Windows

(1) Application programming

 

(2) Kernel programming

- 운영체제가 제공하는 기능을 제한 또는 확장하기 위하여 대부분의 경우 device driver를 통하여 이루어집니다.

 

 

 

 

1-2. Debugging in Windows OS

(1) Types of error

- 컴파일 오류 (Compilation errors 또는 Compile-time errors)

컴파일 오류의 경우 컴파일러가 이해하지 못하는 코드 로직을 발견한 경우 컴파일 오류가 발생합니다. 주로 문법적인 부분에 오류가 있을 때 컴파일 에러가 발생하게 됩니다.

 

- 런타임(실행) 오류 (Runtime errors)

실행 도중 발생하는 오류로써, 작성한 코드 로직에서 수행할 수 없는 작업을 시도할 때 발생하게 됩니다. 보통 코드 작성 시 설계 미숙으로 인한 경우가 일반적입니다. (Ex : 0으로 나누는 경우, 무한 루프에 빠진 경우, NullPointerException 등...)

 

- 논리적 오류 (Logical errors)

- 논리적인 오류로써 개발자가 의도하지 않은 대로 결과가 나오는 경우를 의미합니다.

 

 

→ 컴파일 오류는 소스코드의 문법적인 오류로써 용이하게 해결할 수 있으나 실행(Runtime) 오류와 논리적(Logical) 오류를 해결하기 위해서는 디버깅 과정이 반드시 필요합니다.

 

  응용 프로그램에 오류가 발생하는 경우에는 해당 프로그램의 프로세스를 종료시키는 것으로도 충분하지만 Kernel mode에서 동작하는 프로세스에서 발생하는 오류는 시스템 전체에 영향을 주게 되고 최악의 경우 BSOD(Blue Screen of Death)를 발생시키고 시스템이 종료될 수 있습니다.

 

 

 

 

 

 

2. Resources for WinDbg Debugging

2-1. WHDC(Windows Hardware Developer Center) - 특정 운영체제 환경에서 하드웨어가 동작한다는 의미?

(1) 운영체제 기반에서 하드웨어를 제어하기 위한 프로그램(Device driver)이 동작한다는 의미입니다.

 

(2) Windows 운영체제 기반에서 디바이스 드라이버 프로그램을 개발하기 위한 다양한 리소스를 제공하고 있습니다.

- WDK(Windows Driver Kit)

 

- OS Symbol files

 

 

 

 

2-2. WDK(Windows Driver Kit)

(1) Device driver build environment

 

(2) Device driver samples

 

(3) Debugging program, WinDbg

 

 

 

 

 

 

3. Kernel mode Debugging

Kernel mode Debugging

 

3-1. Kernel mode debugging

(1) 커널에서 동작하는 프로그램의 디버깅은 두 대의 컴퓨터가 필요한 것으로 생각해 볼 수 있습니다.

- 응용 프로그램에 오류가 있어서 시스템이 멈추게 된다면?

 

- 만약 운영체제의 코드에 오류가 있어서 시스템이 멈추게 된다면 어떻게 될까?

 

 

(2) 두 대의 컴퓨터를 Serial cable로 연결하여 디버깅을 수행합니다.

- Debugee

→ 첫 번째 컴퓨터에는 개발하려고 하는 커널 프로그램이 동작하고, Target Computer(PC)라고 합니다.

 

→ VMware에서 Guest OS를 설치하고 개발하려고 하는 커널 프로그램을 설치합니다.

 

 

- Debugger

→ 두 번째 컴퓨터에는 디버깅 프로그램(WinDbg)이 동작하고 Host Computer(PC)라고 합니다.

 

Symbol이 설치되어야 한다는 것은?

· 디버깅하려고 커널 프로그램이 동작하는 운영체제(즉 Target 컴퓨터의 운영체제)의 symbol과 해당 커널 프로그램의 symbol이 있어야 효율적인 디버깅이 가능합니다.

 

 

 

 

 

 

4. Symbol

What si symbol?

 

4-1. Symbol

(1) 프로그램의 디버깅을 위해 필요한 정보를 의미합니다. 크게 두 가지로 나눌 수 있습니다.

 

(2) Function names

- Function names의 경우 메모리 주소를 의미합니다.

 

(3) Global variables

- 전역 변수(Global variable) 이름은 메모리 주소에 Mapping됩니다.

 

 

 

 

4-2. PDB file

(1) Symbol file

 

(2) Build environments

- Checked build (Debug mode)

 

- Free build (Release mode)

 

 

(3) PDB 파일은 Checked build 환경에서 생성됩니다.

 

 

 

 

 

 

5. Configuration Serial Port in VMware

- 모든 설정은 VMware에 Windows 운영체제가 이미 설치되어 있다고 가정하겠습니다.

 

- 만약 Windows 운영체제가 설치되어 있지 않다면, 마이크로소프트 공식 홈페이지에 접속하여 가상 머신에서 Windows 환경을 구축하기 위한 이미지 파일(.iso)을 다운로드 받아서 운영체제 환경을 구성한 뒤 진행되어야 합니다.

 

(1) VMware의 Edit virtual machine settings으로 환경설정에 접속하여 Debugging을 위한 Serial Port를 설정해 주어야 합니다. 하단의 Add 버튼을 클릭하여 Serial Port 항목을 선택하고 Finish 버튼을 눌러서 Serial Port를 추가합니다.

Serial Port를 설정하는 화면 - VMware의 Add Hardware Wizard

 

 

(2) 이후 Hardware 항목에 Serial Port가 추가된 것을 확인한 뒤, 우측의 Connection → Use named pipe: 항목에서 첫 번째 입력 칸에 다음과 같은 내용 입력하고 OK 버튼을 눌러 환경설정 값을 저장합니다.

 

-  \\.\pipe\com_1

Use named pipe : \\.\pipe\com_1

 

 

(3) 가상 머신에서 Windows를 부팅시킨 후, Kernel debugging을 위한 Windows 환경 설정이 필요하기 때문에 Command prompt를 관리자 권한으로 실행시킵니다.

가상 머신 운영체제에서 Command prompt를 관리자 권한으로 실행한다.

 

 

(4) bcdedit / debug on 커맨드로 디버그 연결을 활성화시킵니다.

Command : bcdedit /debug on

 

 

(5) bcdedit /dbgsettings serial debugport:2 baudrate:115200 커맨드로 명령을 실행시킵니다. 여기서  /dbgsettings serial의 의미는 Vmware에서 추가했던 Serial port와 연결하겠다는 의미입니다.

 

-  debugport:2 부분은 개인의 환경설정마다 다를 수 있지만 Serial Port 2라고 설정되어 있으므로 debugport:2이며 만약 Serial Port라고 되어 있다면 debugport:1입니다.

 

- baudrate:115200은 Serial의 통신속도를 정해주는 명령입니다.

Command : bcdedit / dbgsettings seiral debugport:2 baudrate:115200

 

 

(6) 마지막으로 WinDbg Kernel debugging을 진행해 보겠습니다.

- WinDbg를 실행하고 최상단 메뉴 File → Kernel Debug를 선택합니다.

Kernel Debug 진행

 

 

(7) 이전 작업들은 VMware와 Windows를 이어주는 환경설정을 완료한 것으로 이번 마지막 작업은 WinDbg와 VMware를 연결해 주는 환경설정을 진행합니다.

 

- Kernel Debugging 창에서 COM 항목으로 이동한 뒤 아래와 같이 값을 설정하고 확인을 클릭합니다.

 

- Baud Rate : 115200 / Port : \\.\pipe\com_1  / Pipe 항목 체크  

Kernel debug - Baud Rate : 115200 / Port : \\.\pipe\com_1

 

 

(8) 정상적으로 수행했다면 커맨드 라인에서 응답 대기 중인 콘솔 메시지를 확인할 수 있습니다.

가상 머신의 운영체제의 응답을 기다리고 있는 WinDbg

 

 

(9) 이 상태에서 가상 머신의 Windows를 디버깅 모드로 재부팅한 후, WinDbg의 Debug 메뉴 → Break 항목을 체크해 주면, 아래와 같이 Guest OS의 커널 디버깅을 위한 접속이 완료된 콘솔 화면을 확인할 수 있으며 정상적으로 연결된 상태입니다.

 

 

 

 

 

6. Guest OS (in Target) Booting  / Symbol path in WinDbg settings

(1) Debugging 모드로 부팅하기

- 관리자 모드로 Command prompt를 실행합니다.

관리자 모드로 Command Prompt 실행

 

 

(2) 명령어로 bcdedit /set {default} bootmenupolicy legacy 커맨드를 입력하여 설정을 완료합니다.

- 해당 커맨드를 통해 가상 윈도우를 재부팅할 때 F8 키를 통해 안전모드로 접근하여 디버깅 모드로 부팅할 수 있습니다.

Command : bcdedit /set {default} bootmenupolicy legacy

 

(3) WinDbg에 접속한 후 File → Symbol file path 경로로 접속하여 Symbol path를 설정해 주어야 합니다. 경로를 입력해 주는 공간에 아래와 같이 경로를 작성해 주시면 됩니다.

 

  c:\sym;srv*c:\sym\websym*http://msdl.microsoft.com/download/symbols

 

- 경로를 입력했다면 우측 OK 버튼을 눌러 경로 설정을 완료합니다.

 

Symbol information

Microsoft Internet Symbol Server The data you requested cannot be retrieved. You have reached this page because either you or an application that you are running has tried to retrieve debugging data from Microsoft. The requested data is either not availabl

msdl.microsoft.com

 

Symbol path : c:\sym;srv*c:\sym\websym*http://msdl.microsoft.com/download/symbols

 

 

(4) 모든 설정이 완료되어 Windows Kernel Debugging이 가능한 상태입니다.

가상 머신의 운영체제에 대한 Kernel debugging이 수행 가능한 상태

 

 

 

 

 

 

- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.

- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.

댓글