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


РегистрЫ

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

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

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

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

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

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

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

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

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

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

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

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

Pseudo-Registers

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

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

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

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

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

События

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