Этот раздел посвящен применению выражений в 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