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


Регистры

Модуль отладчика можно использовать для проверки и изменения регистров целевого объекта.

Регистры, доступные в целевом объекте, зависят от архитектуры процессора. Описание регистров для процессора x86 см. в разделе Архитектура процессора. Полное описание регистров, доступных для процессора, см. в документации по процессору.

Набор регистров

Для поиска количества регистров в целевом объекте можно использовать метод GetNumberRegisters .

На каждый регистр ссылается его индекс. Индекс первого регистра равен нулю, а индекс последнего регистра — это число регистров минус один. Чтобы найти индекс регистра, имя которого известно, используйте GetIndexByName.

Метод GetDescription возвращает сведения о регистре. Сюда входят имя регистра, тип значений, которые он может хранить, а также то, является ли он подрегистром.

Подрегистр — это регистр, содержащийся в другом регистре. При изменении подрегистрастра также изменяется регистр, содержащий его. Например, на процессоре x86 подрегистр ax совпадает с 16-разрядными значениями 32-разрядного регистра eax .

Существует три специальных регистра, значения которых можно найти с помощью следующих методов. Интерпретация значений этих регистров зависит от платформы.

Управление регистрами

Значение регистра можно считать с помощью метода GetValue. С помощью Командлетов GetValues и GetValues2 можно считывать несколько регистров.

Значение можно записать в регистр с помощью метода SetValue. Несколько регистров можно записать с помощью SetValues и SetValues2.

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

Pseudo-Registers

Псевдорегистраторы — это переменные, поддерживаемые подсистемой отладчика, которые содержат определенные значения, например , $teb — это имя псевдорегистрала, значение которого является адресом блока среды потоков (TEB) текущего потока. Дополнительные сведения и список псевдорегистров см. в разделе Синтаксис псевдорегистров.

Каждый псевдорегистрал имеет индекс. Индекс — это число от нуля до числа псевдорегистров (возвращается GetNumberPseudoRegisters) минус единица. Чтобы найти индекс псевдорегистрала по имени, используйте getPseudoIndexByName. Значения псевдорегистров можно считывать с помощью GetPseudoValues, а значения можно записывать в псевдорегистры с помощью SetPseudoValues. Для описания псевдорегистрала, включая его тип, используйте GetPseudoDescription.

Примечание Не все псевдорегистры доступны во всех сеансах отладки или во время определенного сеанса.

Отображение регистров

Методы OutputRegisters и OutputRegisters2 форматируют регистры целевого объекта и отправляют их клиентам в качестве выходных данных.

События

При изменении значений регистров целевого объекта подсистема вызывает метод обратного вызова IDebugEventCallbacks::ChangeDebuggeeState с параметром Flags, равным DEBUG_CDS_REGISTERS.