DBH 사용

DBH는 DbgHelp API(dbghelp.dll)의 많은 함수를 노출하는 명령줄 도구입니다. 기호 파일의 내용에 대한 정보를 표시하고, 파일의 기호에 대한 특정 세부 정보를 표시하고, 파일을 검색하여 다양한 조건과 일치하는 기호를 검색할 수 있습니다.

DBH에서 제공하는 기능은 x(기호 검사)와 같은 명령으로 WinDbg, KD 및 CDB 내에서 제공되는 기능과 유사합니다.

대화형 모드에서 DBH 실행

조사하려는 기호가 있는 대상 모듈을 지정하는 간단한 명령줄로 DBH를 시작합니다. 대상 모듈은 EXE 프로그램 또는 PDB 기호 파일일 수 있습니다. 조사할 PID(프로세스 ID)를 지정할 수도 있습니다. 전체 구문은 DBH Command-Line 옵션을 참조하세요.

DBH가 시작되면 지정된 모듈에 대한 기호를 로드한 다음 다양한 명령을 입력할 수 있는 프롬프트가 표시됩니다. 사용 가능한 명령 목록은 DBH 명령을 참조하세요.

예를 들어 다음 시퀀스는 프로세스 ID가 4672인 대상 프로세스를 지정하여 DBH를 시작한 다음, DBH 프롬프트에서 열거형 명령을 실행하여 특정 패턴과 일치하는 기호를 표시한 다음, q 명령을 실행하여 DBH를 종료합니다.

C:\> dbh -p:4672 
            400000 : TimeTest
          77820000 : ntdll
          77740000 : kernel32

pid:4672 mod:TimeTest[400000]: enum TimeTest!ma* 

 index            address     name
     1             42cc56 :   main
     3             415810 :   malloc
     5             415450 :   mainCRTStartup

pid:4672 mod:TimeTest[400000]: q 

goodbye 

일괄 처리 모드에서 DBH 실행

단일 DBH 명령만 실행하려는 경우 명령줄의 끝에 지정할 수 있습니다. 이렇게 하면 DBH가 시작되고, 지정된 모듈을 로드하고, 지정된 명령을 실행한 다음, 종료됩니다.

예를 들어 이전 예제를 단일 명령줄로 바꿀 수 있습니다.

C:\> dbh -p:4672 enum TimeTest!ma* 
           400000 : TimeTest
         77820000 : ntdll
         77740000 : kernel32

index            address     name
    1             42cc56 :   main
    3             415810 :   malloc
    5             415450 :   mainCRTStartup 

이 DBH 실행 방법은 일괄 처리 파일에서 쉽게 사용할 수 있으므로 일괄 처리 모드라고 합니다. 이 버전의 명령줄 뒤에는 DBH 출력을 다른 프로그램으로 리디렉션하는 파이프( | )가 뒤따를 수도 있습니다.

대상 지정

DBH는 실행 중인 프로세스의 프로세스 ID, 실행 파일의 이름 또는 기호 파일의 이름으로 세 가지 방법으로 대상을 선택할 수 있습니다. 예를 들어 프로세스 ID가 1234인 현재 실행 중인 MyProg.exe 정확히 하나의 instance 있는 경우 다음 명령은 거의 동일합니다.

C:\> dbh -v -p:1234 
C:\> dbh -v c:\mydir\myprog.exe 
C:\> dbh -v c:\mydir\myprog.pdb 

이러한 명령의 한 가지 차이점은 프로세스 ID를 지정하여 DBH를 시작할 때 DBH가 이 프로세스에서 사용되는 실제 가상 주소를 사용한다는 것입니다. 실행 파일 이름 또는 기호 파일 이름을 지정하여 DBH를 시작할 때 DBH는 모듈의 기본 주소가 표준 값(예: 0x01000000)이라고 가정합니다. 그런 다음 기본 명령을 사용하여 실제 기본 주소를 지정하여 모듈에 있는 모든 기호의 주소를 이동할 수 있습니다.

DBH는 디버거가 수행하는 방식으로 대상 프로세스에 연결되지 않습니다. DBH는 프로세스를 시작하거나 종료할 수 없으며 해당 프로세스 실행 방법을 변경할 수도 없습니다. DBH가 프로세스 ID로 프로세스에 연결하려면 대상 프로세스를 실행해야 하지만 DBH가 시작되면 대상 프로세스를 종료할 수 있으며 DBH는 해당 기호에 계속 액세스합니다.

데코레이팅된 기호 및 디코레이트되지 않은 기호

기본적으로 DBH는 기호를 표시하고 검색할 때 디코딩되지 않은 기호 이름을 사용합니다. SYMOPT_UNDNAME 기호 옵션을 끄거나 DBH 명령줄에 -d 옵션을 포함하면 장식이 포함됩니다.

기호 장식에 대한 자세한 내용은 공용 및 개인 기호를 참조하세요.

DBH 종료

DBH를 종료하려면 DBH 프롬프트에서 q 명령을 사용합니다.