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


Доступ к памяти по виртуальному адресу

Для доступа к адресам памяти или диапазонам адресов можно использовать несколько команд. Visual Studio и WinDbg предоставляют элементы пользовательского интерфейса (а также команды), которые можно использовать для просмотра и редактирования памяти. Дополнительные сведения см. в разделе "Просмотр и редактирование памяти" в WinDbg (классическая модель).

Следующие команды могут считывать или записывать память в различных форматах. Эти форматы включают шестнадцатеричные байты, слова (слова, двойные слова и четыре слова), целые числа (короткие, длинные и квадратные целые числа и целые числа без знака), числа с плавающей запятой (10-байт, 16-байт, 32-байт и 64-байтовые реальные числа) и символы ASCII.

Для обработки более специализированных типов данных можно использовать следующие команды:

  • Команда dt (тип отображения) находит различные типы данных и отображает структуры данных, созданные приложением, которое выполняется отладка. Эта команда является очень универсальной и имеет множество вариантов и параметров.

  • Команда ds, dS (Display String) отображает структуру данных STRING, ANSI_STRING или UNICODE_STRING данных.

  • Трассировки команд dl (отображаемый связанный список) и отображает связанный список.

  • Команда d*s (отображаемые слова и символы) находит двойные слова или четыре слова, которые могут содержать сведения о символах, а затем отображают данные и сведения о символах.

  • Команда расширения !address отображает сведения о свойствах памяти, расположенной по конкретному адресу.

Для управления диапазонами памяти можно использовать следующие команды:

  • Команда m (Move Memory) перемещает содержимое одного диапазона памяти в другой.

  • Команда f (Fill Memory) записывает шаблон в диапазон памяти, повторяя его до тех пор, пока диапазон не будет заполнен.

  • Команда c (Compare Memory) сравнивает содержимое двух диапазонов памяти.

  • Команда s (Search Memory) ищет указанный шаблон в диапазоне памяти или ищет все символы ASCII или Юникода, которые существуют в диапазоне памяти.

  • Команда .holdmem (удержание и сравнение памяти) сравнивает один диапазон памяти с другим.

В большинстве случаев эти команды интерпретируют свои параметры в текущем радиксе. Поэтому следует добавить 0x перед шестнадцатеричными адресами, если текущий радикс не равен 16. Однако выходные данные этих команд обычно отображаются в шестнадцатеричном формате независимо от текущего радикса. (Дополнительные сведения о выходных данных см. в отдельных разделах команд.) В окне памяти отображаются целые числа и реальные числа в десятичном формате и отображаются другие форматы в шестнадцатеричном формате.

Чтобы изменить радикс по умолчанию, используйте команду n (Set Number Base). Чтобы быстро преобразовать числа из одной системы счисления в другую, используйте команду ? (Вычислить выражение) или команду .форматов (Показать форматы чисел).

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