[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Применение выражений в программе adb

Этот раздел посвящен применению выражений в adb.

Рассматриваются следующие вопросы:

Выражения с целыми числами

В выражении можно указывать целые числа в десятичном, восьмеричном и шестнадцатеричном формате. Десятичное целое должно начинаться с десятичной цифры, отличной от нуля. Восьмеричное число должно начинаться с нуля (0) и содержать цифры от 0 до 7. Шестнадцатеричное число должно начинаться с префикса 0x и может содержать десятичные цифры и буквы от a до f (как в нижнем, так и в верхнем регистре). Ниже приведены примеры правильной записи чисел:

Десятичные       Восьмеричные       Шестнадцатеричные
34              042              0x22
4090            07772            0xffa

Выражения с идентификаторами

Идентификаторы - это имена глобальных переменных и функций, определенных в отлаживаемой программе. Идентификаторы эквивалентны адресу данной переменной или функции. Они хранятся в таблице символьных имен (идентификаторов) программы и доступны, если эта таблица не удалена из программного файла.

В выражениях идентификатор может записываться в том виде, в каком он был задан в исходной программе, или в том виде, в каком он хранится в таблице символьных имен. Длина идентификатора в таблице не должна превышать 8 символов.

Если вы указываете команду ?, программа adb создает символьные адреса на основе имен из таблицы. В результате в выводе команды ? иногда встречаются имена функций. Этого не происходит, если команда ? используется для текста (команд), а команда / используется для данных.

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

Если флаг -g не был задан, адрес локальной переменной определить нельзя. Получить значение локальной переменной b функции sample можно с помощью следующей команды:

.sample.b / x - значение локальной переменной.
.sample.b = x - адрес локальной переменной.

Выражения с операторами

Целые числа, идентификаторы, переменные и имена регистров можно использовать в выражениях со следующими операторами:

Унарные операторы:   
~ (тильда) Побитовое дополнение
- (тире) Целое отрицание
* (звездочка) Возвращает содержимое ячейки с указанным адресом

Бинарные операторы:   
+ (плюс) Сложение
- (минус) Вычитание
* (звездочка) Умножение
% (процент) Целочисленное деление
&(амперсанд) Побитовое умножение
] (правая квадратная скобка) Побитовое сложение
^ (символ вставки) Модуль
# (номер) Округление до ближайшего большего кратного числа

В программе adb используется 32-разрядная арифметика. Значения, превышающие десятичное число 2 147 483 647, представляются отрицательными величинами. В следующем примере показан результат присваивания двух разных значений переменной n, и вывод ее значения в десятичном и шестнадцатеричном виде:

2147483647>n<
n=D
    2147483647<
n=X
    7fffffff
2147483648>n<
n=D
    -2147483648<
n=X
    80000000

Унарные операторы имеют более высокий приоритет, чем бинарные. Все бинарные операторы имеют одинаковый приоритет и вычисляются слева направо. Ниже приведены примеры вычисления выражений программой adb:

2*3+4=d
    10
4+2*3=d
    18

Для изменения приоритета операций применяются круглые скобки. Например, если в предыдущем выражении использовать скобки, то его значение изменится следующим образом:

4+(2*3)=d
    10

Унарный оператор * (звездочка) рассматривает заданный адрес как указатель на сегмент данных. Значение выражения, в котором используется этот оператор, равно значению, на которое указывает этот указатель. Например, значение выражения

*0x1234

равно величине, которая хранится в ячейке с адресом 0x1234, тогда как значение

0x1234

равно 0x1234.

Связанная информация

Обзор программы отладки adb

Настройка программы отладки adb

Арифметические выражения и вывод текста

Просмотр и редактирование исходного файла с помощью программы adb

Применение выражений в программе adb


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]