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


!искать

Расширение !search выполняет поиск страниц в физической памяти для данных размера указателя, которые соответствуют указанным критериям.

Синтаксис

!search [-s] [-p] Data [ Delta [ StartPFN [ EndPFN ]]] 
!search -?

Параметры

-s
Приводит к пропускам ошибок проверки символов во время поиска. Это полезно, если вы получаете слишком много неправильных символов для ошибок ядра.

-p
Вызывает интерпретацию значения Данных как 32-разрядное значение, предотвращая любое расширение знака.

Данные
Указывает данные для поиска. Данные должны быть размером указателя в целевой системе (32 бита или 64 бита). Всегда отображается точное соответствие значению данных . Другие совпадения отображаются также в зависимости от значения Delta; дополнительные сведения см. в разделе "Примечания" ниже.

Дельта
Указывает допустимое различие между значением в памяти и значением Data. Дополнительные сведения см. в разделе "Примечания" ниже.

StartPFN
Указывает номер кадра страницы (PFN) начала диапазона для поиска. Если это опущено, поиск начинается на самой низкой физической странице.

EndPFN
Указывает номер кадра страницы (PFN) конца диапазона для поиска. Если это опущено, поиск заканчивается на самой высокой физической странице.

-?
Отображает справку по этому расширению в окне команды отладчика.

DLL-библиотеки

Kdexts.dll

Дополнительная информация

Дополнительные способы отображения и поиска физической памяти см. в статье "Чтение и запись памяти".

Замечания

Если заданы startPFN и EndPFN , они используются в качестве номеров кадров страницы начала и конца диапазона в физической памяти для поиска. Описание номеров кадров страницы см. в разделе "Преобразование виртуальных адресов в физические адреса". Если опущены startPFN и EndPFN , выполняется поиск по всей физической памяти.

Отображаются все хиты.

Расширение !search будет выполнять поиск по всей памяти в указанном диапазоне страниц и проверять каждое ULONG_PTR выровненное значение. Отображаются значения, удовлетворяющие по крайней мере одному из следующих критериев:

  • Значение точно соответствует данным .

  • Если значение delta равно 0 или опущено: значение отличается от значения Data по одному биту.

  • Если delta ненулевое значение: значение отличается от данных по крайней мере delta. Другими словами, значение находится в диапазоне [Data - Delta, Data + Delta].

  • Если delta ненулево: значение отличается от наименьшего числа в диапазоне (Data - Delta) на один бит.

В большинстве случаев данные указывают нужный адрес, но можно указать любой ULONG_PTR размер данных.

Поскольку структуры поисковой системы отладчика находятся в памяти на целевом компьютере, при поиске всей памяти (или любого диапазона, содержащего эти структуры), вы увидите совпадения в области, в которой находятся сами структуры. Если необходимо устранить эти совпадения, выполните поиск случайного значения; Это указывает, где находятся структуры поиска отладчика.

Ниже приведено несколько примеров. Ниже приведен поиск на странице памяти с 0x237D PFN для значений между 0x80001230 и 0x80001238 включительно:

kd> !search 80001234 4 237d 237d 

Ниже будут искать страницы памяти, начиная от PFN 0x2370 до 0x237F для значений, которые находятся в пределах одного бита 0x0F100F0F. Точные совпадения указываются полужирным шрифтом; Остальные выключаются по одному биту:

kd> !search 0f100f0f 0 2370 237f
Searching PFNs in range 00002370 - 0000237F for [0F100F0F - 0F100F0F]

Pfn      Offset   Hit      Va       Pte      
- - - - - - - - - - - - - - - - - - -
0000237B 00000368 0F000F0F 01003368 C0004014 
0000237C 00000100 0F100F0F 01004100 C0004014 
0000237D 000003A8 0F100F0F 010053A8 C0004014 
0000237D 000003C8 0F100F8F 010053C8 C0004014 
0000237D 000003E8 0F100F0F 010053E8 C0004014 
0000237D 00000408 0F100F0F 01005408 C0004014 
0000237D 00000428 0F100F8F 01005428 C0004014 
Search done.

Столбцы в отображении приведены следующим образом: Pfn — это номер кадра страницы (PFN) страницы; Смещение — это смещение на этой странице; Хит — это значение по указанному адресу; Va — это виртуальный адрес, сопоставленный с этим физическим адресом (если это существует и может быть определено); Pte — это запись таблицы страницы (PTE).

Чтобы вычислить физический адрес, переместите PFN влево три шестнадцатеричные цифры (12 битов) и добавьте смещение. Например, последняя строка таблицы — это виртуальный адрес 0x0237D000 + 0x428 = 0x0237D428.