Поделиться через


s (память поиска)

Команда 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 значение Range игнорируется, а отладчик выполняет поиск только тех попаданий, которые были сохранены предыдущей командой .

nХиты
Указывает количество обращений, сохраняемых при использовании флага s . Значение по умолчанию — 1024 попадания. Если вы используете n вместе с другими флагами, n должен быть последним флагом, за которым следует аргумент Hits . Интервал между n и hits является необязательным, но вы не можете добавить другие пробелы в квадратные скобки. Если более поздний поиск, использующий флаг s , обнаруживает больше указанного числа попаданий, отображается сообщение об ошибке Переполнение , уведомляющее вас о том, что сохраняются не все попадания.

lДлина
При поиске произвольных строк ASCII или Юникода возвращаются только строки длиной не менее длины . Длина по умолчанию — 3. Это значение влияет только на поисковые запросы, использующие флаги -sa или -su .

Ж
Выполняет поиск только в областях памяти, доступных для записи. Необходимо заключить "w" в квадратные скобки.

1
Отображает только адреса совпадений поиска в выходных данных поиска. Этот параметр полезен, если вы используете маркер FOREACH для передачи выходных данных команды в входные данные другой команды.

Тип
Указывает тип памяти для поиска. Добавьте дефис (-) перед типом . Можно использовать одно из следующих значений Type .

Тип Описание

b

Байт (8 бит)

w

WORD (16 бит)

d

DWORD (32 бита)

Q

QWORD (64 бит)

a

Строка ASCII (не обязательно строка с пустым завершением)

u

Строка Юникода (не обязательно строка, заканчивающаяся null)

Если опустить type, используются байтовые значения. Однако при использовании флагов нельзя пропускать тип.

Sa
Выполняет поиск любой памяти, содержащей печатаемые строки ASCII. Используйте флаг lLength , чтобы указать минимальную длину таких строк. Минимальная длина по умолчанию составляет 3 символа.

Су
Выполняет поиск любой памяти, содержащей печатаемые строки Юникода. Используйте флаг lLength , чтобы указать минимальную длину таких строк. Минимальная длина по умолчанию составляет 3 символа.

Диапазон
Указывает область памяти для поиска. Этот диапазон не может превышать 256 МБ, если не используется синтаксис L? . Дополнительные сведения об этом синтаксисе см. в разделе Синтаксис адреса и диапазона адресов.

Узор
Указывает одно или несколько значений для поиска. По умолчанию эти значения являются значениями байтов. В поле Тип можно указать различные типы памяти. Если вы указываете значение 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 .

Среда

Элемент Описание
Режимы Пользовательский режим, режим ядра
Цели Динамический аварийный дамп
Платформы Все

Дополнительные сведения

Дополнительные сведения об операциях с памятью и описание других команд, связанных с памятью, см. в разделе Чтение и запись памяти.

Комментарии

Если отладчик находит указанный шаблон байтов, отладчик отображает первый адрес памяти в области памяти Диапазон , где был найден шаблон. Отладчик отображает фрагмент памяти, который начинается с этого расположения, в формате, соответствующем указанному типу памяти Type . Если typeимеет значение или u, отображается содержимое памяти и соответствующие символы ASCII или Юникода.

Параметр Pattern необходимо указать в виде ряда байтов, если не указано другое значение Type . Можно ввести значения байтов в виде числовых символов или символов ASCII:

  • Числовые значения интерпретируются как числа в текущем радиксе (16, 10 или 8). Чтобы изменить радикс по умолчанию, используйте команду n (задать числовую базу). Вы можете переопределить радикс по умолчанию, указав префикс 0x (шестнадцатеричный), префикс 0n (decimal), префикс 0t (восьмеричный) или префикс 0y (двоичный). Примечание Радикс по умолчанию работает по-разному при использовании выражений C++. Дополнительные сведения об этих выражениях и радиксе см. в разделе Вычисление выражений.

  • Символы ASCII необходимо заключать в одинарные прямые кавычки. Нельзя использовать escape-символы В стиле C (например, "\0" или "\n").

Если указано несколько байтов, их необходимо разделить пробелами.

Команды s-a и s-u выполняют поиск указанных строк ASCII и Юникода соответственно. Эти строки не обязательно должны заканчиваться null.

Команды s-sa и s-su выполняют поиск неопределенных строк ASCII и Юникода. Они полезны, если вы проверяете диапазон памяти, чтобы узнать, содержит ли он какие-либо печатные символы. Параметры флагов позволяют указать минимальную длину строки для поиска.

Пример. Следующая команда находит строки ASCII длиной >=3 в диапазоне, начиная с 0000000140000000 и заканчивая 400 байтами позже.

s-sa 0000000140000000 L400

Следующая команда находит строки ASCII длиной >=4 в диапазоне, начиная с 0000000140000000 и заканчивая 400 байтами позже.

s -[l4]sa 0000000140000000 L400

Следующая команда выполняет то же самое, но ограничивает поиск областями памяти, доступными для записи.

s -[wl4]sa 0000000140000000 L400

Следующая команда выполняет то же самое, но отображает только адрес соответствия, а не адрес и значение.

s -[1wl4]sa 0000000140000000 L400

Команда s-v выполняет поиск объектов с тем же типом данных, что и объект Object . Эту команду можно использовать только в том случае, если нужным объектом является класс C++ или другой объект, связанный с виртуальными таблицами функций (Vtables). Команда s-v выполняет поиск адресов виртуальныхtables этого класса в области памяти Range . Если в этом классе существует несколько виртуальных таблицы, алгоритм поиска ищет все эти значения указателя, разделенные соответствующим количеством байтов. При обнаружении совпадений отладчик возвращает базовый адрес объекта и полные сведения об этом объекте, аналогичные выходным данным команды dt (тип отображения).

Пример. Предположим, что текущий радикс равен 16. Следующие три команды выполняют одно и то же: поиск расположений памяти от 0012FF40 до 0012FF5F для "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" 

Эти команды находят каждый вид "Hello" и возвращают адрес каждого такого шаблона, т. е. адрес буквы "H".

Отладчик возвращает только шаблоны, которые полностью содержатся в диапазоне поиска. Перекрывающиеся шаблоны находятся правильно. (Другими словами, шаблон "QQQ" встречается три раза в "QQQQQ".)

В следующем примере показан поиск, использующий параметр Type . Эта команда выполняет поиск в местах памяти с 0012FF40 по 0012FF5F для двойного слова "VUTS":

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

На компьютерах с маленьким эндианом "VUTS" совпадает с шаблоном байтов "S" "T" "U" "V". Однако при поиске WORD, DWORD и QWORD возвращаются только те результаты, которые правильно выровнены по байтам.