WinDbg는 일반적으로 명령은 기호 X 시리즈를 확인 사용 ---

X (기호 검사)

지정된 패턴에 일치하는 모든 상황에서 X 명령 표시 기호.

X [옵션] 모듈! 기호 
X [옵션] *

매개 변수 :

  • 옵션
    특정 기호 검색 옵션을 제공합니다. 다음과 같은 옵션 중 하나 이상을 사용할 수 있습니다
    / 0
    각 심볼의 주소를 표시합니다.

    / 2
    은 각 심볼의 이름 만.

    / 2
    방송 주소 및 이름 (오히려 데이터 유형보다는) 각 기호.

    / D
    은 USING 디버거 마크 업 언어를 표시 출력한다.

    / t는
    데이터 형식을 알고있는 경우, 각 심볼의 데이터 타입을 표시한다.

    / V의
    심볼 유형의 각각의 심볼의 표시 (로컬, 글로벌 변수, 함수, 또는 불명). 이 옵션은 각 심볼의 크기를 표시합니다. 기호 크기 기능은 메모리 크기의 함수이다. 다른 기호는 데이터 타입의 크기가 심볼의 크기를 표시합니다. 바이트 크기 측정하고 16 진수 형식으로 표시하는 것이 있습니다.

    / s 의 크기
    (바이트 단위)만을 디스플레이 크기가 같은지 의 크기 심볼 값. 함수 심벌 크기는 상기 메모리 기능의 크기이다. 다른 기호의 크기 의 데이터 타입은 심볼의 크기를 나타냅니다. 항상 심볼 크기를 결정할 수없는 표시합니다. 크기는 영이 아닌 정수 여야합니다.

    / q를
    보여주는 기호 형식을 인용했다.

    / P
    디버거 좌 괄호 이전 공백없이, 함수 및 파라미터의 이름을 표시한다. 당신은 함수 이름과 인수하려면 X 다른 위치 표시에 복사를, 디스플레이의 이러한 유형의 간소화를 도모 할 수있다.

    / F는
    함수의 데이터 사이즈를 나타낸다.

    / D
    데이터의 데이터 사이즈를 나타낸다.

    / A
    오름차순으로 표시된 주소로.

    / A는
    주소를 내림차순으로 정렬.

    / N
    오름차순 이름 표시 순서.

    / N은
    디스플레이의 내림차순으로 정렬 이름.

    / z
    오름차순 눌러 디스플레이 크기.

    / Z
    오더 표시 내림차순 크기별.

  • 모듈
    검색 모듈을 지정합니다. 이 모듈은 EXE, DLL, 또는 SYS 파일이 될 수 있습니다. 모듈은 야생 동물의 기능 및 사양의 다양성을 포함 할 수있다.
  • 기호
    모드 기호가 포함되어야합니다 지정합니다. 기호 와일드 카드와 지정자의 다양한 포함 할 수 있습니다. 이 심볼 패턴 매칭 따라서 대소 문자 구별 정합 및 단일 프리앰블을 강조하기 때문에 (U)는 밑줄 임의의 수를 나타낸다. 공백이 포함 된 기호 이름을 지정할 수 있도록, 심볼 공간에 추가 할 수 있습니다 (예를 들어, "연산자 새로운"또는 "템플릿 <A, B>" ), 와일드 카드를 사용하지 않고.

환경 :

모드

사용자 모드에서 커널 모드

실시간 크래시 덤프

플랫폼

완전한

인 MyModule을 발견 할 것이다 다음 명령은 문자열 "포함 spin모든 기호를".

0:000> x mymodule!*spin* 

다음 명령은 신속하게 "DownloadMinor"와 "DownloadMajor"심볼 인 MyModule을 찾을 수 있습니다.

0:000> x mymodule!downloadm??or 

또한 인 MyModule의 모든 심볼을 표시하려면 다음 명령을 사용할 수 있습니다.

0:000> x mymodule!* 

위의 명령은 또한 인 MyModule에서 디버거 심볼 정보 과부하를 강제로. 당신이 기호 최소 디스플레이 오버로드 된 모듈을 사용하려면, 다음 명령을 사용합니다.

0:000> x mymodule!*start* 

몇 가지 기호는 항상 문자열 "시작"을 포함한다. 따라서, 이전 명령은 항상 명령이 제대로 작동하는지 확인하기 위해 출력의 일부를 보여줍니다. 그러나 표시 순서의 앞의 과도한 길이 피하기 위해 *!는 X-인 MyModule을 .

주소 및 심볼의 각 심볼의 전체 이름을 시작 표시합니다. 함수의 심볼 이름 경우, 디스플레이는 또한 이들 파라미터 유형의 목록을 포함한다. 심볼이 전역 변수의 경우, 현재 값이 표시됩니다.

X의 명령은 특별한 경우입니다. 모든 주소와 현재 컨텍스트의 지역 변수의 이름을 표시하려면 다음 명령을 사용합니다.

0:000> x * 

그주의    는 개인 기호를로드 된, 또는 로컬 변수에 액세스 할 수 없습니다하지 않는 한, 대부분의 경우,. 로컬 변수의 값을 표시하기 위해 사용 DV (로컬 변수를 디스플레이) 명령.

다음의 예를 보여줍니다 / 0 / 1/ 2 옵션을.

0:000:x86> x /0 MyApp!Add*
00b51410          
00b513d0 
      
0:000:x86> x /1 MyApp!Add*
MyApp!AddThreeIntegers
MyApp!AddTwoIntegers

0:000:x86> x /2 MyApp!Add*
00b51410          MyApp!AddThreeIntegers
00b513d0          MyApp!AddTwoIntegers

사용하는 경우 의 X 로 명령 출력 foreach는 입력 명령은 / 0 / 1/ 2 유용하다.

.foreach ( place { x /0 MyApp!*MySym*} ) { .echo ${place}+0x18 }

다음은 선별 기능 모듈 NOTEPAD.EXE에서 사용되는 스위치를 표시 / F를 .

0:000> x /f /v notepad!*main*
prv func   00000001`00003340  249 notepad!WinMain (struct HINSTANCE__ *, struct HINSTANCE__ *, char *, int)
prv func   00000001`0000a7b0   1c notepad!WinMainCRTStartup$filt$0 (void)
prv func   00000001`0000a540  268 notepad!WinMainCRTStartup (void)

사용 / V의 옵션은 첫 번째 열은 표시 기호 (로컬, 글로벌, 매개 변수, 함수 또는 알 수 없음)의 유형을 보여줍니다. 두 번째 열은 심벌 주소이다. 세 번째 열 (바이트) 심볼 크기이다. 네 번째 열은 모듈의 명칭과 기호의 이름을 나타낸다. 일부의 경우, 디스플레이는 등호 (=), 그리고 상기 심볼 데이터 형식 하였다. 또한 디스플레이 소스 (일반 또는 완전한 심볼 정보) 기호.

kd> x /v nt!CmType*
global 806c9e68    0 nt!CmTypeName = struct _UNICODE_STRING []
global 806c9e68  150 nt!CmTypeName = struct _UNICODE_STRING [42]
global 806c9e68    0 nt!CmTypeName = struct _UNICODE_STRING []
global 805bd7b0    0 nt!CmTypeString = unsigned short *[]
global 805bd7b0   a8 nt!CmTypeString = unsigned short *[42]

이전 예에서, 크기는 16 진수로 제공되고, 데이터 형식은 소수점 포맷으로 제공한다. 따라서, 이전 예에서의 마지막 행은 데이터 유형은 42 짧은 부호를 가리 포인터 배열이다. 이 배열의 크기는 168 0xA8 16 진수로 표시되는, 4 * 168 = 42이다.

당신은 사용할 수 있습니다 / S의 크기 특정 심볼의 값 (바이트) 크기 만 표시 옵션을 선택합니다. 예를 들어, 전술 한 예에서, 명령 0xA8 개체로 표시되는 기호의 크기로 제한 될 수있다.

kd> x /v /s a8 nt!CmType*
global 805bd7b0   a8 nt!CmTypeString = unsigned short *[42]

데이터 형식을 사용하여

/ T의 옵션은 기호 정보의 각 유형에 대한 데이터를 표시 할 수있는 디버거가 발생합니다. 도없이, 많은 심볼이 주 / T는 옵션이 정보도 표시됩니다. 사용 / t는 , 같은 기호의 데이터 유형 정보가 두 번 표시됩니다.

0:001> x prymes!__n*
00427d84 myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 myModule!MyStructInstance = struct MyStruct
00427d14 myModule!_NLG_Destination = <no type information>

0:001> x /t prymes!__n*
00427d84 char * myModule!__nullstring = 0x00425de8 "(null)"
0042a3c0 int myModule!_nstream = 512
Type information missing error for _nh_malloc
004021c1 struct MyStruct myModule!MyStructInstance = struct MyStruct
00427d14 <NoType> myModule!_NLG_Destination = <no type information>

X 명령의 유형의 예는 표시됩니다.

0:001> x foo!MyClassInstance
00f4f354          foo!MyClassInstance = 0x00f78768

X 명령은 유형의 이름에 따라, 아무것도 표시되지 않습니다.

0:001> x foo!MyClass
0:001>

정보 표시 형의 유형의 이름을 사용하려면 사용을 고려 DT에게 (디스플레이 유형) 유형에 대한 정보를 제공하고, 인스턴스를 입력합니다 :

0:001> dt foo!MyClass
   +0x000 IntMemberVariable : Int4B
   +0x004 FloatMemberVariable : Float
   +0x008 BoolMemberVariable : Bool
   +0x00c PtrMemberVariable : Ptr32 MyClass

템플릿을 사용하여

이 예에서와 같이, 템플릿 클래스를 표시하는 X 명령을 포함하는 와일드 카드를 사용할 수 있습니다.

dbgcmd
0:001>  x Fabric!Common::ConfigEntry*TimeSpan?
000007f6`466a2f9c Fabric!Common::ConfigEntry<Common::TimeSpan>::ConfigEntry<Common::TimeSpan> (void)
000007f6`466a3020 Fabric!Common::ConfigEntry<Common::TimeSpan>::~ConfigEntry<Common::TimeSpan> (void)

템플릿을 사용하는 경우, 사용을 고려 DT (표시 형식) 는 x 명령은 하나의 템플릿 클래스 항목을 표시하지 않기 때문에, 명령을.

0:001> dt foo!Common::ConfigEntry<Common::TimeSpan>
   +0x000 __VFN_table : Ptr64 
   +0x008 componentConfig_ : Ptr64 Common::ComponentConfig
   +0x010 section_         : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >
   +0x038 key_             : std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >

추천

출처www.cnblogs.com/yilang/p/11574532.html