WinDbg 디버깅2007. 9. 23. 02:27
반응형

ds, dS는 문자열을 볼 때 유용한 명령어입니다.

ds 는 ANSI_STRING 구조체에 들어있는 문자열을 보여줍니다.
dS 는 UNICODE_STRING 구조체에 들어있는 문자열을 보여줍니다.

예제1) ds

PANSI_STRING pAStr = f9e9f608;

위와 같은 변수가 있었다면 다음과 같이 볼 수 있습니다.

kd> db f9e9f608
f9e9f608  0c 00 0d 00 6a 1d ae f9-00 10 ae f9 00 10 ae f9  ....j...........

구조체의 형태는 다음과 같으므로

typedef struct _STRING {
  USHORT  Length;
  USHORT  MaximumLength;
  PCHAR  Buffer;
} ANSI_STRING *PANSI_STRING;

네번째 바이트부터 보이는 6a 1d ae f9 가 Buffer 포인터입니다. 여기에 문자열이 들어있습니다.
보통 아래와 같이 Display Memory 명령으로 확인합니다.

kd> db f9ae1d6a
f9ae1d6a  6e 74 6f 73 6b 72 6e 6c-2e 65 78 65 00 00 51 01  ntoskrnl.exe..Q.

복잡하게 이렇게 하지 않고 이를 한방에 해결해 주는 것이 ds 입니다.
그냥 f9e9f608 를 주면 불필요한 것은 보여주지도 않고 문자열만 예쁘게 보여줍니다.

kd> ds f9e9f608
f9ae1d6a  "ntoskrnl.exe"


예제2) dS

PUNICODE_STRING pUStr = f9e97c80;

위와 같은 변수가 있었다면 다음과 같이 볼 수 있습니다.

kd> db f9e97c80
f9e97c80  1c 00 1e 00 80 7a e9 f9-00 00 00 00 00 00 00 00  .....z..........

구조체의 형태는 다음과 같으므로

typedef struct _UNICODE_STRING {
  USHORT  Length;
  USHORT  MaximumLength;
  PWSTR  Buffer;
} UNICODE_STRING *PUNICODE_STRING;

네번째 바이트부터 보이는 80 7a e9 f9 가 Buffer 포인터입니다. 여기에 문자열이 들어있습니다.
보통 아래와 같이 Display Memory 명령으로 확인합니다.

kd> db f9e97a80
f9e97a80  49 00 53 00 41 00 50 00-4e 00 50 00 5c 00 54 00  I.S.A.P.N.P.\.T.
f9e97a90  42 00 41 00 30 00 33 00-62 00 30 00 00 00 2a 00  B.A.0.3.b.0...*.

역시 위와 비슷하게 dS 한방으로 예쁘게 볼 수 있습니다.

kd> dS f9e97c80
f9e97a80  "ISAPNP\TBA03b0"


추가로 Display Memory 명령중 문자열을 보는데 편리한 명령어가 있습니다.

da, du 명령어 입니다.

da 는 PCHAR 포인터가 가리키는 문자열을 보여줍니다.
du 는 PWSTR 포인터가 가리키는 문자열을 보여줍니다.


예제3) da

ds 예제에서

PCHAR  Buffer = f9ae1d6a;

이므로 다음과 같이 볼 수 있습니다.

kd> da f9ae1d6a
f9ae1d6a  "ntoskrnl.exe"


예제4) du

dS 예제에서 

PWSTR  Buffer = f9e97a80;

이므로 다음과 같이 볼 수 있습니다.

kd> du f9e97a80
f9e97a80  "ISAPNP\TBA03b0"


문자열 보기좋게 보시기 바랍니다. ^^
Happy Debugging!!!

http://www.driveronline.org/bbs/view.asp?tb=tipbbs&GotoPage=5&s_bulu=&s_key=&no=37

반응형
Posted by GreeMate