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 ~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 los 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 puede 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.
n aciertos
Especifica el número de visitas que se van a guardar al usar la marca s . El valor predeterminado es 1024 visitas. 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 puede agregar ningún otro espacio entre corchetes. Si cualquier búsqueda posterior que use 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 de longitud largos. La longitud predeterminada es 3. Este valor afecta solo a las búsquedas que usan las marcas -sa o -su .
t
Busca solo regiones de memoria que se pueden escribir. Debe incluir el "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) |
t |
WORD (16 bits) |
d |
DWORD (32 bits) |
t |
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 los valores de bytes. Sin embargo, si usa Marcas, no puede omitir El tipo.
Sa
Busca cualquier memoria que contenga cadenas ASCII imprimibles. Use la marca l Length 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 l Length 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 |
Destinos | En tiempo real, volcado de errores |
Platforms | 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 fragmento de memoria que comienza en esa ubicación en un formato que coincide con el tipo de memoria type especificado. Si Type es o u, 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 la base predeterminada 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 a partir de 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 tarde.
s -[l4]sa 0000000140000000 L400
El siguiente comando hace lo mismo, pero limita la búsqueda a las regiones de memoria que se pueden escribir.
s -[wl4]sa 0000000140000000 L400
El siguiente comando hace lo mismo, pero solo muestra 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 . Puede usar este comando solo 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 del intervalo las direcciones de las tablas virtuales 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. 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 de este tipo, 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. (Es decir, 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, DWORDs y QWORDs devuelven solo los resultados alineados correctamente por bytes.