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과 해당 인수를 제외하고 대괄호 사이에 공백을 추가할 수 없습니다. 예를 들어 s 및 w 옵션을 지정하려면 s -[sw]Type Range Pattern 명령을 사용합니다.
다음 플래그 중 하나 이상을 지정할 수 있습니다.
s
현재 검색의 모든 결과를 저장합니다. 이러한 결과를 사용하여 나중에 검색을 반복할 수 있습니다.
r
현재 검색을 마지막으로 저장된 검색의 결과로 제한합니다. 동일한 명령에서 s 및 r 플래그를 사용할 수 없습니다. r을 사용하면 범위 값이 무시되고 디버거는 이전 명령에서 저장한 적중 항목만 검색합니다.
n안타
플래그를 사용할 때 저장할 적중 횟수를 지정합니다. 기본값은 1024안타입니다. n을 다른 플래그와 함께 사용하는 경우 n은 마지막 플래그여야 하며 그 뒤에 Hits 인수가 와야 합니다. n과 Hits 사이의 공간은 선택 사항이지만 대괄호 안에 다른 공백을 추가할 수는 없습니다. 나중에 플래그를 사용하는 검색이 지정된 적중 횟수보다 더 많은 것을 검색하는 경우 오버플로 오류 메시지가 표시되어 모든 적중 항목이 저장되지 않음을 알립니다.
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-a 및 s-u 명령은 각각 지정된 ASCII 및 유니코드 문자열을 검색합니다. 이러한 문자열은 null로 종료될 필요가 없습니다.
s-sa 및 s-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 검색은 올바르게 바이트 정렬된 결과만 반환합니다.