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 возвращаются только те результаты, которые правильно выровнены по байтам.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по