Синтаксис символов и сопоставление символов

Символы позволяют напрямую управлять маркерами, которые используются отлаживаемой программой. Например, можно задать точку останова в функции main с помощью команды bp main или отобразить целочисленную переменную MyInt с помощью команды dd MyInt L1.

Во многих случаях символы можно использовать в качестве параметров в командах отладчика. Это поддерживается для большинства числовых параметров, а также поддерживается в некоторых текстовых параметрах. В дополнение к общим правилам синтаксиса символов существуют также правила синтаксиса символов, которые применяются в каждом из этих случаев.

Общие правила синтаксиса символов

Имя символа состоит из одного или нескольких символов, но всегда начинается с буквы, подчеркивания (_), вопросительного знака (?) или знака доллара ($).

Имя символа может быть квалифицировано именем модуля. Восклицательный знак (!) отделяет имя модуля от символа (например, mymodule!main). Если имя модуля не используется, символ по-прежнему может иметь префикс с восклицательным знаком. Использование восклицательного знака без имени модуля может быть особенно полезно, даже для локальных переменных, чтобы указать команде отладчика, что параметр является именем, а не шестнадцатеричным числом. Например, выцветание переменной будет считываться командой dt (Тип отображения) в качестве адреса, если только она не имеет префикса с восклицательным знаком или не используется параметр -n. Однако чтобы указать, что символ является локальным, перед ним следует знак доллара ( $ ) и восклицательный знак ( ! ), как в $!lime.

Имена символов полностью не учитывают регистр. Это означает, что отладчики неправильно распознают наличие myInt и MyInt в вашей программе; Любая команда, ссылающаяся на одну из этих команд, может получить доступ к другой, независимо от того, как команда имеет прописную букву.

Синтаксис символов в числовых выражениях

Отладчик понимает два разных типа выражений: выражения ассемблер макросамблера (Майкрософт) (MASM) и выражения C++. Что касается символов, эти две формы синтаксиса отличаются следующим образом:

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

  • В выражениях C++ каждый символ интерпретируется в соответствии с его типом. В зависимости от того, на что ссылается символ, он может интерпретироваться как целое число, структура данных, указатель функции или любой другой тип данных. Символ, не соответствующий типу данных C++ (например, неизмененному имени модуля), приведет к синтаксической ошибке.

Описание того, когда и как использовать каждый тип синтаксиса, см. в разделе Вычисление выражений.

При использовании синтаксиса выражения MASM любой символ, который может быть интерпретирован как шестнадцатеричное число или как регистр (например, BadFeed, ebX), всегда должен иметь префикс с восклицательным знаком. Это гарантирует, что отладчик распознает его как символ.

Для задания суффикса символа можно использовать команду ss (Задать суффикс символа). Это указывает отладчику автоматически добавить "A" или "W" к любому имени символа, который он не может найти иначе.

Многие подпрограммы Win32 существуют как в версиях ASCII, так и в Юникоде. К этим подпрограммам часто добавляется "A" или "W" в конце их имен соответственно. Использование суффикса символа поможет отладчику при поиске этих символов.

Сопоставление суффиксов не активно по умолчанию.

Синтаксис символов в текстовых выражениях

Символы можно использовать в текстовых параметрах некоторых команд, например bm (задать точку останова) и x (проверить символы).

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

Суффикс символа не используется при сопоставлении символов в текстовых выражениях.