Compartir a través de


s (memoria de búsqueda)

El comando s busca en la memoria para buscar un patrón de bytes específico.

No confunda este comando con los ~s (Cambiar procesador actual),~s (Establecer subproceso actual),|s (Establecer proceso actual) o ||s (Establecer sistema actual) comandos.

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

Parámetros

[Flags]
Especifica una o varias opciones de búsqueda. Cada marca es una sola letra. Debe incluir las marcas en un único conjunto de corchetes ([]). No se pueden agregar espacios entre corchetes, excepto entre n o l y su argumento. Por ejemplo, si desea especificar las opciones s y w , use el comando s -[sw]Type Range Pattern.

Puede especificar una o varias de las marcas siguientes:

s
Guarda todos los resultados de la búsqueda actual. Puede usar estos resultados para repetir la búsqueda más adelante.

R
Restringe la búsqueda actual a los resultados de la última búsqueda guardada. No se pueden usar las marcas s y r en el mismo comando. Cuando se usa r, se omite el valor de Range y el depurador busca solo los aciertos guardados por el comando s anterior.

naciertos
Especifica el número de aciertos que se guardarán al usar la marca s . El valor predeterminado es 1024 aciertos. Si usa n junto con otras marcas, n debe ser la última marca, seguida de su argumento Hits . El espacio entre n y Hits es opcional, pero no se pueden agregar otros espacios entre corchetes. Si una búsqueda posterior que usa la marca s detecta más del número especificado de visitas, se muestra el mensaje de error overflow para notificarle que no se guardan todos los aciertos.

Longitud l
Hace que una búsqueda de cadenas ASCII o Unicode arbitrarias devuelva solo cadenas que tienen al menos caracteres length . La longitud predeterminada es 3. Este valor afecta solo a las búsquedas que usan las marcas -sa o -su .

W
Busca solo regiones de memoria grabables. Debe incluir "w" entre corchetes.

1
Muestra solo las direcciones de las coincidencias de búsqueda en la salida de búsqueda. Esta opción es útil si usa el token .foreach para canalizar la salida del comando a la entrada de otro comando.

Tipo
Especifica el tipo de memoria que se va a buscar. Agregue un guión (-) delante de Tipo . Puede usar uno de los siguientes valores type .

Tipo Descripción

b

Byte (8 bits)

w

WORD (16 bits)

d

DWORD (32 bits)

Q

QWORD (64 bits)

a

Cadena ASCII (no necesariamente una cadena terminada en NULL)

u

Cadena Unicode (no necesariamente una cadena terminada en NULL)

Si omite Type, se usan valores de bytes. Sin embargo, si usa Flags, no puede omitir Type.

Sa
Busca cualquier memoria que contenga cadenas ASCII imprimibles. Use la marca lLength para especificar una longitud mínima de estas cadenas. La longitud mínima predeterminada es de 3 caracteres.

su
Busca cualquier memoria que contenga cadenas Unicode imprimibles. Use la marca lLength para especificar una longitud mínima de estas cadenas. La longitud mínima predeterminada es de 3 caracteres.

Gama
Especifica el área de memoria que se va a buscar. Este intervalo no puede tener más de 256 MB de longitud a menos que use la sintaxis L? . Para obtener más información sobre esta sintaxis, vea Sintaxis de intervalo de direcciones y direcciones.

Patrón
Especifica uno o varios valores que se van a buscar. De forma predeterminada, estos valores son valores de bytes. Puede especificar diferentes tipos de memoria en Tipo. Si especifica un valor WORD, DWORD o QWORD, dependiendo de las otras opciones seleccionadas, es posible que tenga que incluir el patrón de búsqueda entre comillas simples (por ejemplo, "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.......`..@....

Si especifica una cadena, con el tipo ascii, escríbala entre comillas dobles (por ejemplo, "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
Busca objetos del mismo tipo que el objeto especificado.

Objeto
Especifica la dirección de un objeto o la dirección de un puntero a un objeto . A continuación, el depurador busca objetos del mismo tipo que el objeto que especifica Object .

Entorno

Elemento Descripción
Modos Modo de usuario, modo kernel
Targets Volcado de memoria activo y de memoria
Plataformas All

Información adicional

Para obtener más información sobre la manipulación de memoria y una descripción de otros comandos relacionados con la memoria, vea Lectura y escritura de memoria.

Comentarios

Si el depurador encuentra el patrón de bytes que especifique, el depurador muestra la primera dirección de memoria en el área memoria intervalo donde se encontró el patrón. El depurador muestra un extracto de memoria que comienza en esa ubicación en un formato que coincide con el tipo de memoria type especificado. Si Type es ou, se muestran el contenido de la memoria y los caracteres ASCII o Unicode correspondientes.

Debe especificar el parámetro Pattern como una serie de bytes, a menos que especifique un valor type diferente. Puede escribir valores de bytes como caracteres numéricos o ASCII:

  • Los valores numéricos se interpretan como números en el radix actual (16, 10 o 8). Para cambiar el radix predeterminado, use el comando n (Establecer base de números). Puede invalidar el radix predeterminado especificando el prefijo 0x (hexadecimal), el prefijo 0n (decimal), el prefijo 0t (octal) o el prefijo 0y (binario). Nota El radix predeterminado se comporta de forma diferente cuando se usan expresiones de C++. Para obtener más información sobre estas expresiones y el radix, vea Evaluación de expresiones.

  • Debe incluir caracteres ASCII entre comillas simples. No se pueden usar caracteres de escape de estilo C (como '\0' o '\n').

Si especifica varios bytes, debe separarlos por espacios.

Los comandos s-a y s-u buscan cadenas ASCII y Unicode especificadas, respectivamente. Estas cadenas no tienen que terminar en null.

Los comandos s-sa y s-su buscan cadenas ASCII y Unicode no especificadas. Son útiles si está comprobando un intervalo de memoria para ver si contiene caracteres imprimibles. Las opciones de marcas permiten especificar una longitud mínima de cadena que se va a buscar.

Ejemplo: El siguiente comando busca cadenas ASCII que tienen una longitud >=3 en el intervalo que comienza en 0000000140000000 y finalizan 400 bytes más adelante.

s-sa 0000000140000000 L400

El siguiente comando busca cadenas ASCII que tienen una longitud >=4 en el intervalo que comienza en 0000000140000000 y finalizan 400 bytes más adelante.

s -[l4]sa 0000000140000000 L400

El siguiente comando hace lo mismo, pero limita la búsqueda a regiones de memoria que se pueden escribir.

s -[wl4]sa 0000000140000000 L400

El siguiente comando hace lo mismo, pero muestra solo la dirección de la coincidencia, en lugar de la dirección y el valor.

s -[1wl4]sa 0000000140000000 L400

El comando s-v busca objetos del mismo tipo de datos que el objeto Object . Este comando solo se puede usar si el objeto deseado es una clase de C++ u otro objeto asociado a tablas de funciones virtuales (Vtables). El comando s-v busca en el área memoria de intervalo las direcciones de las tablas Vtables de esta clase. Si existen varias tablas Vtables en esta clase, el algoritmo de búsqueda busca todos estos valores de puntero, separados por el número adecuado de bytes. Si se encuentran coincidencias, el depurador devuelve la dirección base del objeto y la información completa sobre este objeto, similar a la salida del comando dt (Tipo de presentación).

Ejemplo: Supongamos que el radix actual es 16. Todos los tres comandos siguientes hacen lo mismo: buscar ubicaciones de memoria 0012FF40 a 0012FF5F para "Hello".

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" 

Estos comandos localizan cada apariencia de "Hello" y devuelven la dirección de cada patrón, es decir, la dirección de la letra "H".

El depurador devuelve solo los patrones que están completamente contenidos en el intervalo de búsqueda. Los patrones superpuestos se encuentran correctamente. (En otras palabras, el patrón "QQQ" se encuentra tres veces en "QQQQQ").

En el ejemplo siguiente se muestra una búsqueda que usa el parámetro Type . Este comando busca ubicaciones de memoria de 0012FF40 a 0012FF5F para la palabra doble "VUTS":

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

En equipos little-endian, "VUTS" es el mismo que el patrón de bytes "S" "T" "U" "V". Sin embargo, las búsquedas de WORD, DWORD y QWORDs devuelven solo los resultados alineados correctamente por bytes.