```c

1: kd> x HelloDriver!gTraceFlags

fffff801`908a3020 HelloDriver!gTraceFlags = 0

1: kd> ed HelloDriver!gTraceFlags 0xffffffff

1: kd> x HelloDriver!gTraceFlags

fffff801`908a3020 HelloDriver!gTraceFlags = 0xffffffff

```

`` ed`` : e는 edit, d는 DWORD. `` eq``같은 것도 가능하다.


Windbg에 OutputDebugString로 출력되는 디버그 스트링 찍기

커널의 ``c Kd_DEFAULT_Mask``와 ``c &``연산을 하기 때문에, 기본적으로 아무것도 출력되지 않도록 되어있다.

따라서 이 값을 ``c 0xffffffff``로 설정해준다.

주의!! dbgview 켜놓으면 여기서 먼저 가져가서 windbg에 안뜬다!!

```c

0: kd> ed nt!Kd_DEFAULT_Mask 0xffffffff

0: kd> dd nt!Kd_DEFAULT_Mask L1    // 뒤에 L1 붙이면 1개만 출력

fffff801`9161df68  ffffffff

```

`` dd`` : Display DWORD


```c

1: kd> bp HelloDriver!DriverEntry

1: kd> bl        // breakpoint list

     0 e Disable Clear  fffff801`908d6000     0001 (0001) HelloDriver!DriverEntry

1: kd> bc 0         // 삭제


1: kd> bu DriverName!DriverFunction     // break unresolved symbol.

// 현재 해당 심볼이 안올라온 상태에서, 나중에 해당 심볼이 나타나면 break 걸리도록 설정.

```


코드에서 break point 넣기

```c
__asm int3;        // x86
__debugbreak();    // x64
```


디버깅 심볼 추가하기

File - Symbol File Path에 `` .pdb``파일이 있는 디렉토리 추가.
추가하고 `` .reload`` 를 입력 해줘야 반영 된다.
Source File Path도 추가하면 소스 코드도 보여준다.

NT Kernel debugging symbol 다운로드 받기

```c

kd> .symfix C:\symbols

kd> .sympath            // symbol 경로 확인

kd> .reload

```


* symbol matching

Windows의 심볼 파일 확장자는 `` .pdb``다.

심볼 매칭 과정은 다음과 같다.

1. binary의 PE section 중, debug section이 존재하는데, 여기에 `` .pdb``파일의 경로가 기록되어 있다.

2. 이 경로에 가서 `` .pdb`` 파일을 불러와 심볼을 매칭한다.

3. ASLR이 적용되어 있는 경우라도, 어차피 ImageBase + RVA 식으로 접근하기 때문에 ImageBase만 알고 있다면 symbol matching이 가능하다.


* 원격으로 커널 디버깅 하는 경우, windbg는 호스트에서 실행되기 때문에, `` .pdb``파일을 호스트 PC에서 찾는다. 그래서 그냥 호스트에서 컴파일하고, 게스트로 넘긴 다음 디버깅하면 알아서 호스트에 있는 `` .pdb``파일(컴파일 할 때 생성된)을 불러온다.


etc command

```

!process

dt _eprocess [address]

.hh [command]    // help 창 띄워준다

```