Share via


s(검색 메모리)

명령은 메모리를 검색하여 특정 바이트 패턴을 찾습니다.

이 명령을 ~s(현재 프로세서 변경), ~s(현재 스레드 설정), |s(현재 프로세스 설정) 또는 || 와 혼동하지 마세요.s(현재 시스템 설정) 명령.

s [-[[Flags]Type]] Range Pattern 
s -[[Flags]]v Range Object 
s -[[Flags]]sa Range 
s -[[Flags]]su Range 

매개 변수

[플래그]
하나 이상의 검색 옵션을 지정합니다. 각 플래그는 단일 문자입니다. 플래그를 단일 대괄호 집합([])으로 묶어야 합니다. n 또는 l과 해당 인수를 제외하고 대괄호 사이에 공백을 추가할 수 없습니다. 예를 들어 sw 옵션을 지정하려면 s -[sw]Type Range Pattern 명령을 사용합니다.

다음 플래그 중 하나 이상을 지정할 수 있습니다.

s
현재 검색 결과를 모두 저장합니다. 이러한 결과를 사용하여 나중에 검색을 반복할 수 있습니다.

R
현재 검색을 마지막으로 저장된 검색의 결과로 제한합니다. 동일한 명령에서 sr 플래그를 사용할 수 없습니다. r을 사용하면 Range 값이 무시되고 디버거는 이전 명령에서 저장한 적중 항목만 검색합니다.

n적중 횟수
플래그를 사용할 때 저장할 적중 횟수를 지정합니다. 기본값은 1024안타입니다. n을 다른 플래그와 함께 사용하는 경우 n은 마지막 플래그여야 하며 그 뒤에 Hits 인수가 있어야 합니다. nHits 사이의 공간은 선택 사항이지만 대괄호 내에 다른 공백을 추가할 수는 없습니다. 나중에 플래그 를 사용하는 검색이 지정된 적중 횟수보다 더 많이 검색되면 오버플로 오류 메시지가 표시되어 모든 적중 항목이 저장되지는 않음을 알립니다.

l길이
임의의 ASCII 또는 유니코드 문자열을 검색하여 길이 이상의 문자열만 반환하도록 합니다. 기본 길이는 3입니다. 이 값은 -sa 또는 -su 플래그를 사용하는 검색에만 영향을 줍니다.

W
쓰기 가능한 메모리 영역만 검색합니다. "w"를 대괄호로 묶어야 합니다.

1
검색 출력에 검색 일치 항목의 주소만 표시합니다. 이 옵션은 .foreach 토큰을 사용하여 명령 출력을 다른 명령의 입력으로 파이프하는 경우에 유용합니다.

Type
검색할 메모리 유형을 지정합니다. 형식 앞에 하이픈(-)을 추가 합니다 . 다음 형식 값 중 하나를 사용할 수 있습니다.

Type Description

b

바이트(8비트)

w

WORD(16비트)

d

DWORD(32비트)

q

QWORD(64비트)

a

ASCII 문자열(반드시 null로 끝나는 문자열은 아님)

u

유니코드 문자열(반드시 null로 끝나는 문자열은 아님)

형식을 생략하면 바이트 값이 사용됩니다. 그러나 플래그를 사용하는 경우 형식을 생략할 수 없습니다.

Sa
인쇄 가능한 ASCII 문자열이 포함된 메모리를 검색합니다. l길이 플래그를 사용하여 이러한 문자열의 최소 길이를 지정합니다. 기본 최소 길이는 3자입니다.

수호
인쇄 가능한 유니코드 문자열이 포함된 메모리를 검색합니다. l길이 플래그를 사용하여 이러한 문자열의 최소 길이를 지정합니다. 기본 최소 길이는 3자입니다.

범위
검색할 메모리 영역을 지정합니다. L? 구문을 사용하지 않는 한 이 범위는 256MB를 초과할 수 없습니다. 이 구문에 대한 자세한 내용은 주소 및 주소 범위 구문을 참조하세요.

패턴
검색할 값을 하나 이상 지정합니다. 기본적으로 이러한 값은 바이트 값입니다. 형식에서 다양한 유형의 메모리를 지정할 수 있습니다. 선택한 다른 옵션에 따라 WORD, DWORD 또는 QWORD 값을 지정하는 경우 검색 패턴을 작은따옴표(예: 'H')로 묶어야 할 수 있습니다.

0:000> s -d @rsp L1000000 'H'  
0000003f`ff07ec00  00000048 00000000 500c0163 00000000  H.......c..P....
0000003f`ff07ec50  00000048 00000000 00000080 00000000  H...............
0000003f`ff07efc0  00000048 00000000 400c0060 00000000  H.......`..@....

ascii 형식을 사용하여 문자열을 지정하는 경우 큰따옴표(예: "B7")로 묶습니다.

0:000> s -a @rsp L10000000 "B7"  
0000003f`ff07ef0a  42 37 ff 7f 00 00 90 38-4e c2 6c 01 00 00 7d 26  B7.....8N.l...}&
0000003f`ff0ff322  42 37 ff 7f 00 00 f8 5d-42 37 ff 7f 00 00 20 41  B7.....]B7.... A
0000003f`ff0ff32a  42 37 ff 7f 00 00 20 41-42 37 ff 7f 00 00 98 59  B7.... AB7.....Y

-V
지정된 개체와 형식이 같은 개체를 검색 합니다.

Object
개체의 주소 또는 개체에 대한 포인터의 주소를 지정합니다. 그런 다음 디버거는 Object 가 지정하는 개체와 동일한 형식의 개체를 검색합니다.

Environment

항목 Description
모드 사용자 모드, 커널 모드
대상 라이브, 크래시 덤프
플랫폼 모두

추가 정보

메모리 조작 및 다른 메모리 관련 명령에 대한 설명에 대한 자세한 내용은 메모리 읽기 및 쓰기를 참조하세요.

설명

디버거가 지정한 바이트 패턴을 찾으면 디버거는 패턴이 발견된 범위 메모리 영역에 첫 번째 메모리 주소를 표시합니다. 디버거는 지정된 형식 메모리 형식과 일치하는 형식으로 해당 위치에서 시작하는 메모리의 발췌를 표시합니다. Type이 또는u이면 메모리 내용과 해당 ASCII 또는 유니코드 문자가 표시됩니다.

다른 Type 값을 지정하지 않는 한 Pattern 매개 변수를 일련의 바이트로 지정해야 합니다. 바이트 값을 숫자 또는 ASCII 문자로 입력할 수 있습니다.

  • 숫자 값은 현재 반지름(16, 10 또는 8)의 숫자로 해석됩니다. 기본 radix를 변경하려면 n(숫자 기준 설정) 명령을 사용합니다. 0x 접두사(16진수), 0n 접두사(10진수), 0t 접두사(8진수) 또는 0y 접두사(이진)를 지정하여 기본 radix를 재정의 할 수 있습니다. 참고 기본 radix는 C++ 식을 사용할 때 다르게 동작합니다. 이러한 식 및 radix에 대한 자세한 내용은 식 평가를 참조하세요.

  • ASCII 문자를 작은따옴표로 묶어야 합니다. C 스타일 이스케이프 문자(예: '\0' 또는 '\n')를 사용할 수 없습니다.

여러 바이트를 지정하는 경우 공백으로 구분해야 합니다.

s-as-u 명령은 각각 지정된 ASCII 및 유니코드 문자열을 검색합니다. 이러한 문자열은 null로 종료될 필요가 없습니다.

s-sas-su 명령은 지정되지 않은 ASCII 및 유니코드 문자열을 검색합니다. 메모리 범위를 확인하여 인쇄 가능한 문자가 포함되어 있는지 확인하는 경우에 유용합니다. flags 옵션을 사용하면 찾을 최소 문자열 길이를 지정할 수 있습니다.

예제: 다음 명령은 범위에서 길이 >가 =3인 ASCII 문자열을 0000000140000000 시작하여 나중에 400바이트로 끝나는 것을 찾습니다.

s-sa 0000000140000000 L400

다음 명령은 범위에서 길이 >가 =4인 ASCII 문자열을 0000000140000000 시작하여 나중에 400바이트로 끝나는 것을 찾습니다.

s -[l4]sa 0000000140000000 L400

다음 명령은 동일한 작업을 수행하지만 쓰기 가능한 메모리 영역으로 검색을 제한합니다.

s -[wl4]sa 0000000140000000 L400

다음 명령은 동일한 작업을 수행하지만 주소와 값이 아닌 일치 주소만 표시합니다.

s -[1wl4]sa 0000000140000000 L400

s-v 명령은 Object 개체와 동일한 데이터 형식의 개체를 검색합니다. 원하는 개체가 C++ 클래스이거나 가상 함수 테이블(Vtables)과 연결된 다른 개체인 경우에만 이 명령을 사용할 수 있습니다. s-v 명령은 범위 메모리 영역에서 이 클래스의 Vtable 주소를 검색합니다. 이 클래스에 여러 Vtable이 있는 경우 검색 알고리즘은 적절한 바이트 수로 구분된 이러한 모든 포인터 값을 찾습니다. 일치하는 항목이 있으면 디버거는 dt(표시 형식) 명령의 출력과 유사하게 개체의 기본 주소와 이 개체에 대한 전체 정보를 반환합니다.

예: 현재 radix가 16이라고 가정합니다. 다음 세 가지 명령은 모두 동일한 작업을 수행합니다. "Hello"에 대한 메모리 위치 검색 0012FF40~ 0012FF5F.

0:000> s 0012ff40 L20 'H' 'e' 'l' 'l' 'o' 
0:000> s 0012ff40 L20 48 65 6c 6c 6f 
0:000> s -a 0012ff40 L20 "Hello" 

이러한 명령은 "Hello"의 각 모양을 찾고 이러한 각 패턴의 주소(즉, 문자 "H"의 주소)를 반환합니다.

디버거는 검색 범위에 완전히 포함된 패턴만 반환합니다. 겹치는 패턴이 올바르게 발견되었습니다. 즉, "QQQ" 패턴은 "QQQQ"에서 세 번 발견됩니다.

다음 예제에서는 Type 매개 변수를 사용하는 검색을 보여줍니다. 이 명령은 메모리 위치 0012FF40~0012FF5F에서 두 단어 'VUTS'를 검색합니다.

0:000> s -d 0012ff40 L20 'VUTS' 

little-endian 컴퓨터에서 'VUTS'는 바이트 패턴 'S' 'T' 'U' 'V'와 동일합니다. 그러나 WORD, DWORD 및 QWORD 검색은 올바르게 바이트 정렬된 결과만 반환합니다.