2013-10-09 10 views
-2

나는 최근에 윈도우 드라이버 개발을 시작했다. 나는 그것이 어떻게 실제로 내 드라이버를 디버그하는지 궁금하다. 내가 가진 설정은 - Win7을 호스트로, XP를 게스트로 VM웨어에, 그리고 직렬 포트를 통해 디버깅을하고 있습니다. WinDbg은 어떻게 작동합니까?

내가 수행 한 연구

는 :

은 내가 얘기하고 매우 몇 가지를 말에만 this 링크를 발견했다.

이미 단일 OS에서 디버거가 작동하는 방식을 알고 있습니다.이 경우 디버거도 동일한 OS에 있으므로 어떤 프로세스가 실행 중인지 알 수 있습니다. 그것은 이해할 수 있습니다. 하지만 여기서 디버거는 완전히 다른 OS, 완전히 다른 환경에 있습니다. 나는 단지 file->open source files라고 말하면서 중단 점을 넣을 수있다 !! 또한 드라이버를로드 할 때 실제로 거기에서 깨집니다. 내 말은 왜 ../어떻게? 어떻게 XP의 커널은 (커널에 대한 확장, 적어도 WDM, WDK에 대해 알지 못하는) this 드라이버의 소스 코드가 있다는 것을 알게 되나요? 그것도 통제 (환경) 밖에서? 나는 그 안에 breakpoint로 열리는 10 개의 파일을 가질 수 있다는 것을 의미한다. 그러나 그것은 아름답게 작동한다. 나는 그것을 실패하거나 속일 수 없다.

Win7에서 windbg에 소스를 추가 할 때마다 소스에서 바이너리가 생성되고 XP가 바이너리를로드 할 때마다 windbg가 대기중인 바이너리인지 확인합니다. 에 대한. 위의 링크에서 혼란스러운 것은 Vikrant가 디버거가 커널 (XP)에게 프로세스를 디버그 할 의향이 있는지 묻습니다 -> Bus HELLO ... 프로세스가 XP에서 실행 중이고 Winb가 Win7에서 실행 중이고 name or id을 알지 못합니다. 방법. 소스 코드가 있지만, 300 개의 파일로 구성된 드라이버가 있고, 가장 간단한 파일이 windbg에서 열리는 경우를 고려하십시오.이 소스 코드가 실행되는 드라이버의 소스 코드와 어떻게 일치합니까?

+0

당신은 엘리트일지도 모르지만 당신이 투표를 거절한다면 당신의 생각으로 저를 계몽하십시오. 이 침묵이 나를 죽인다.: D –

+0

이 책을 읽으십시오. https://blogs.msdn.microsoft.com/microsoft_press/2012/05/31/new-book-inside-windows-debugging/ – Yijinsei

답변

0

나는 당신의 링크가 당신의 질문을 잘 설명한다고 생각하지만, 당신은 아마도 pdb의 메커니즘이 디버거를 위해 무엇을하는지 깨닫지 못했을 것이다. 호스트 OS의 windbg는 pdb 파일을 사용하여 소스 파일의 행 nubers를 게스트 OS (XP)의 주소로 변환합니다. 그런 다음 디버거 에이전트는이 주소를 사용하여 게스트 OS에서 중단 점 (Int 3)을 설정합니다. 이는 로컬 디버거가 로컬 프로세스와 동일한 방식으로 수행됩니다.

+0

하지만 pdb 파일 경로를 설정하지 않았습니다. 드라이버를 디버깅하기 위해 취한 조치를 읽지 않았습니까? 내 드라이버에 대한 pdb 파일은 특정 위치에있을 수 있으며, WinDbg는 특정 pdb 파일에 대한 전체 HDD를 검색하려고합니다. : D ..? –

+0

Symbol 파일 경로를 올바른 .pdb로 설정하지 않고도 windbg의 소스 코드를 사용하여 어떤 일도 할 수있는 기회를 얻지 못했습니다 - 미안 해요 –

1

@Kjelll 대답이 맞습니다. 다음은 설명에 대한 설명을 포함하여 전체 시나리오입니다.

  1. PDB 파일에는 회선 정보가 있습니다. 이것은 각 (파일, 행) 위치에서 주소 (RVA - 상대 가상 주소) 로의 매핑입니다.
  2. 원본 파일에 중단 점을 설정하면 WinDBG는이 원본 파일이 현재 주소와 일치하는지 확인합니다. 그럴 경우 - 중단 점을 설정합니다. 그렇지 않으면 "미래의 브레이크 포인트"가됩니다 (Microsoft에서이 용어를 사용하는지 확실하지 않음).
  3. 새 바이너리가로드되면 클라이언트의 에이전트가 호스트와 통신하여 바이너리를 알립니다. 이 시점에서 - WinDBG는 PDB 파일을 할당하려고합니다.
  4. WinDBG는 파일 내에 포함 된 PDB 위치에서 시작할 것입니다. 이 값은 windbg -dump -pdbpath xxx.sys 명령 줄을 사용하여 확인할 수 있습니다. 이것은 WinDBG가 .sympathy 경로 (비록 내가 Kjell에게 당신의 코멘트에 대한 답을 줄 것이라고 믿는다)에 있지 않더라도 심볼 파일을 찾는 방법을 설명해야한다.
  5. WinDBG는 .sympathy를 검색합니다.
  6. 심볼이 발견되면 앞으로의 모든 브레이크 포인트를 살펴보고 해당하는 경우 실제 브레이크 포인트를 설정합니다.