В этом разделе описана настройка программы adb.
Рассматриваются следующие вопросы:
В одной строке можно указывать несколько команд, отделяя их друг от друга точкой с запятой (;). Команды выполняются поочередно слева направо. Изменения в текущем адресе и формате передаются следующей команде. Если при выполнении какой-либо команды происходит ошибка, остальные команды игнорируются. Например, следующая последовательность команд перечисляет переменные adb и активные функции в одной из точек программы программы adbsamp2:
$v;$c variables b = 10000000 d = ec e = 10000038 m = 108 t = 2f8. f(0,0) .main+26. main(0,0,0) start+fa
Если при запуске программы adb перенаправить стандартный файл ввода, то adb сможет считывать команды не с клавиатуры, а из текстового файла. Для этого введите символ переправления < (знак "меньше") и укажите имя файла. Например, для того чтобы команды считывались из файла script, введите:
adb sample <script
В этом файле должны быть указаны допустимые команды adb. В случаях, когда один и тот же набор команд применяется для разных объектных файлов, воспользуйтесь файлами сценариев программы adb. С помощью сценариев можно выводить на экран содержимое файлов дампа после того, как в программе произошла ошибка. Файл, содержащий команды выдачи информации о программной ошибке, показан в следующем примере. Если сделать его входным файлом для программы adb, использующей для отладки файла adbsamp2 указанную ниже команду, то вывод будет выглядеть следующим образом:
120$w 4095$s. f:b: r =1n"======= Переменные adb =======" $v =1n"======= Таблица адресов =======" $m =1n"======= Обратная трассировка стека C =======" $C =1n"======= Внешние переменные C =======" $e =1n"======= Регистры =======" $r 0$s =1n"======= Сегмент данных ======="< b,10/8xna
$ adb adbsamp2 <script
adbsamp2:running breakpoint .f: b .f+24 ======= Переменные adb ======= variables 0 = TBD 1 = TBD 2 = TBD 9 = TBD b = 10000000 d = ec e = 10000038 m = 108 t = 2f8 ======= Таблица адресов ======= [0]? map .adbsamp2. b1 = 10000000 e1 = 100002f8 f1 = 0 b2 = 200002f8 e2 = 200003e4 f2 = 2f8 [0]/ map .-. b1 = 0 e1 = 0 f1 = 0 b2 = 0 e2 = 0 f2 = 0 ======= Обратная трассировка стека C =======. f(0,0) .main+26. main(0,0,0) start+fa ======= Внешние переменные C =======Полное слово. errno: 0. environ: 3fffe6bc. NLinit: 10000238. main: 100001ea. exit: 1000028c. fcnt: 0
.loop .count: 1. f: 100001b4. NLgetfile: 10000280. write: 100002e0. NLinit. .X: 10000238 . NLgetfile. .X: 10000280 . cleanup: 100002bc. exit: 100002c8 . exit . .X: 1000028c . . cleanup . .X: 100002bc
======= Регистры ======= mq 20003a24 .errno+3634 cs 100000 gt ics 1000004 pc 100001b4 .f r15 10000210 .main+26 r14 20000388 .main r13 200003ec .loop .count r12 3fffe3d0 r11 3fffe44c r10 0 r9 20004bcc r8 200041d8 .errno+3de8 r7 0 r6 200030bc .errno+2ccc r5 1 r4 200003ec .loop .count r3 f4240 r2 1 r1 3fffe678 r0 20000380 .f. f: b .f+24
======= Сегмент данных ======= 10000000: 103 5313 3800 0 0 2f8 0 ec 10000010: 0 10 1000 38 0 0 0 1f0 10000020: 0 0 0 0 1000 0 2000 2f8 10000030: 0 0 0 0 4 6000 0 6000 10000040: 6e10 61d0 9430 a67 6730 6820 c82e 8 10000050: 8df0 94 cd0e 60 6520 a424 a432 c84e 10000060: 8 8df0 77 cd0e 64 6270 8df0 86 10000070: cd0e 60 6520 a424 a432 6470 8df0 6a 10000080: cd0e 64 c82e 19 8df0 78 cd0e 60 10000090: 6520 a424 a432 c84e 19 8df0 5b cd0e 100000a0: 64 cd2e 5c 7022 d408 64 911 c82e 100000b0: 2e 8df0 63 cd0e 60 6520 a424 a432 100000c0: c84e 2e 8df0 46 cd0e 64 15 6280 100000d0: 8df0 60 cd0e 68 c82e 3f 8df0 4e 100000e0: cd0e 60 6520 a424 a432 c84e 3f 8df0 100000f0: 31 cd0e 64 c820 14 8df0 2b cd0e 10000100:
Максимальная ширина строки (в символах), выдаваемой программой adb, задается с помощью команды $w. Формат команды:
Ширина$w
В этом формате параметр Ширина - целое число, задающее длину выдаваемой на дисплей строки в символах. Можно задавать любую ширину, подходящую для вашего дисплея. При первом вызове программы adb устанавливается ширина по умолчанию, равная 80 символам.
Данная команда может использоваться при перенаправлении вывода на построчный принтер или на специальное устройство вывода. Например, ширина строки дисплея, равная 120 символам (обычно это максимальная длина строки для построчных принтеров), устанавливается с помощью команды:
120$w
Программа adb обычно выдает адреса памяти и файлов в виде суммы идентификатора и смещения. Такой формат позволяет установить связь между командами и данными, показанными на экране, и конкретной функцией или переменной. При запуске программа adb устанавливает максимальное смещение, равное 255, так что символьные адреса присваиваются только тем командам и данным, которые отстоят от начала функции или переменной меньше чем на 256 байтов. Остальные команды и данные получают числовые адреса.
Во многих программах фактический размер функции или переменной превышает 255 байт. По этой причине для работы с большими программами в adb предусмотрена возможность изменения максимального смещения. Для этого предназначена команда $s.
Формат команды:
Смещение$s
Параметр Смещение - целое число, задающее новое значение смещения. Например, следующая команда увеличивает максимально возможное смещение до 4095:
4095$s
После выполнения этой команды всем командам и данным размером меньше 4096 байт будут присваиваться символьные адреса. Можно отключить режим присваивания символьных адресов, указав нулевое смещение. В этом случае все адреса будут числовыми.
Для изменения формата чисел по умолчанию применяются команды $d и $o (octal - восьмеричный). Формат по умолчанию определяет способ интерпретации в программе adb чисел, не начинающихся с 0 (восьмеричные) или с 0x (шестнадцатеричные), и представление чисел на экране, если формат не указан. Эти команды можно использовать для работы с комбинациями десятичных, восьмеричных и шестнадцатеричных чисел.
Команда $o задает переход к восьмеричной системе счисления. После ввода этой команды программа adb будет выдавать все числа в восьмеричном формате, за исключением тех, для которых указан другой формат.
Формат команды $d следующий: Основание$d, где Основание - новое основание системы счисления. Если параметр Основание не указан, то команда $d устанавливает значение по умолчанию, равное 16. При первом запуске программы adb устанавливается шестнадцатеричный формат, который будет использоваться по умолчанию. Если вы изменили формат по умолчанию, то восстановить прежнее значение можно с помощью команды $d без параметра:
$d
Для того чтобы установить десятичный формат, введите следующую команду:
0xa$d
С помощью команд $i и $n можно задать набор команд и мнемонику, которые должны применяться программой adb для дизассемблирования команд. Команда $i определяет набор команд, применяемых для дизассемблирования; команда $n - мнемонику, используемую при дизассемблировании.
Если эти команды введены без параметров, то будут показаны текущие значения.
Возможные параметры команды $i:
com | Задает набор команд, общих для архитектур PowerPC и POWER. |
pwr | Задает набор команд и мнемонику для реализации POWER архитектуры POWER. |
pwrx | Задает набор команд и мнемонику для реализации POWER2 архитектуры POWER. |
ppc | Задает набор команд и мнемонику для PowerPC. |
601 | Задает набор команд и мнемонику для микропроцессора PowerPC 601 RISC. |
603 | Задает набор команд и мнемонику для микропроцессора PowerPC 603 RISC. |
604 | Задает набор команд и мнемонику для микропроцессора PowerPC 604 RISC. |
ANY | Определяет любую допустимую команду. Для перекрывающихся наборов команд по умолчанию будет установлена мнемоника архитектуры POWER. |
Возможные параметры команды
$n:
pwr | Задает мнемонику для реализации POWER архитектуры POWER. |
ppc | Задает мнемонику для платформы POWER. |
Применение выражений в программе adb
Арифметические выражения и вывод текста
Просмотр и редактирование исходного файла с помощью программы adb
Применение выражений в программе adb
Просмотр и редактирование исходного файла с помощью программы adb