다음을 통해 공유


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을 사용하면 범위이 무시되고 디버거는 이전 명령에서 저장한 적중 항목만 검색합니다.

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

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

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

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


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

Type 설명

b

바이트(8비트)

w

WORD(16비트)

d

DWORD(32비트)

q

QWORD(64비트)

a

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

u

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

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

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

수호
인쇄 가능한 유니코드 문자열이 포함된 메모리를 검색합니다. l Length 플래그를 사용하여 이러한 문자열의 최소 길이를 지정합니다. 기본 최소 길이는 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가 지정하는 개체와 동일한 형식의 개체를 검색합니다.

환경

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

추가 정보

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

설명

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

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

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

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

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

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

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

예: 다음 명령은 길이 >가 =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(표시 형식) 명령의 출력과 유사하게 개체의 기본 주소와 이 개체에 대한 전체 정보를 반환합니다.

예: 현재 반지름이 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 검색은 올바르게 바이트 정렬된 결과만 반환합니다.