adb 调试程序参考信息

adb 调试程序使用地址、表达式、运算符、子命令以及变量组织并操作数据。

adb 调试程序地址

与写地址相关的文件中的地址是由与此文件相关的映射决定的。 每个映射都是由两个三重(B1E1F1)以及(B2E2F2)表示的。 对应于写 Address 参数的 FileAddress 参数的计算方法如下:

B1<=Address<E1=>FileAddress= 地址 + F1-B1

B2<=Address<E2=>FileAddress= 地址 + F2-B2

如果所需 Address 参数既不在 B1E1 之间也不在 B2E2 之间,那么 Address 参数无效。 在某些情况下,如带有分离的 I 和 D 空间的程序,文件的两个段落可能重叠。 如果是 ? (问号) 或 / (斜杠) 子命令后跟 * (星号) ,仅使用第二个三元组。

这两个映射的初始设置均适用于一般的 a.outcore 文件。 如果任一文件不是期望的类型,那么该文件的 B1 参数将设置为值 0 , E1 参数将设置为最大文件大小, F1 参数将设置为值 0。 这样,可以在不进行地址转换的情况下检查整个文件。

adb 调试程序表达式

adb 调试程序支持以下表达式:

. (期间)
指定用于子命令的最近地址。 最近地址也称为当前地址。
+(加号)
增加值。 (句点) 按当前增量。
^ (插入记号)
减小值。 (句点) 按当前增量。
"(双引号)
指定命令输入的最近地址。
整数
如果此参数以 0o 开头,那么指定一个八进制数字;如果此参数以 0x# 开头,那么指定一个十六进制数字;如果此参数以 0t 开头,那么指定一个十进制数字。 否则,此表达式指定在当前基数中解释了的数字。 初始时,此基数为 16。
` Cccc '
指定多达 4 个字符的 ASCII 值。 可使用 \(反斜杠)转义 '(撇号)。
< Name
读取 Name 参数的当前值。 Name 参数为变量名或寄存器名称。 adb 命令维护以单个字母或数字命名的多个变量。 如果 Name 参数为寄存器名称,那么从 CoreFile 参数中的系统标题获取寄存器值。 使用 $r 子命令查看有效寄存器名称。
符号
指定一列大写或小写字符、下划线或数字(尽管此列不能以数字开头)。 Symbol 参数的值是从 ObjectFile 参数中的符号表获取的。 如果需要,将 initial _(下划线)作为 Symbol 参数的前缀。
. 文号
指定由 Symbol 参数命名的函数的入口点。
Routine.Name
指定位于指定 C 语言例程中 Name 参数的地址。 Routine 参数和 Name 参数均属于 Symbol 参数。 如果省略了 Name 参数,那么该值即为对应于 Routine 参数的最新激活的 C 堆栈帧的地址。
(Expression)
指定表达式的值。

adb 调试程序运算符

可将整数、符号、变量以及寄存器名称与以下运算符组合在一起:

一元运算符

* 表达式
返回由 CoreFile 参数中的 Expression 参数寻址的位置的内容。
@ 表达式
返回由 Expression 参数中的 Expression 参数寻址的位置的内容。
- 表达式
执行整数取负。
~ 表达式
执行按位取补。
# 表达式
执行逻辑非。

二目运算符

表达式 1+表达式 2
执行整数加法。
表达式 1-表达式 2
执行整数减法。
表达式 1*表达式 2
执行整数乘法。
表达式 1%表达式 2
执行整数除法。
表达式 1表达式 2
执行按位结合。
表达式 1|表达式 2
执行按位分隔。
表达式 1#表达式 2
Expression1 参数向上舍入到 Expression2 参数的下一个倍数。

二目运算符采用左关联律,且与一元运算符相比绑定较少。

adb 调试程序子命令

您可以使用 ? 显示文本或数据段的内容 (问号) 或 / (斜杠) 子命令。 =(等号)子命令以给定格式显示给定地址。 ? / 子命令可以后跟 * (星号)。

?格式
显示开始自 Address 参数的 ObjectFile 参数的内容。 . 的值 (句点) 按每个格式字母的增量总和递增。
/格式
显示开始自 Address 参数的 CoreFile 参数的内容。 . 的值 (句点) 按每个格式字母的增量总和递增。
=格式
显示 Address 参数的值。 is 格式字母对于此命令无意义。

Format 参数由指定显示样式的一个或多个字符组成。 每个格式字符可能以一个十进制整数开头,而该十进制整数为格式字符的重复计数。 单步执行格式时, . (句点) 按每个格式字母给出的金额递增。 如果未指定格式,那么使用上次的格式。

可用格式字母如下:

a
打印 的值。 (句点) 符号形式。 检查符号以确保这些符号的类型正确。
b
显示当前基数中的无符号寻址字节。
c
显示寻址字符。
C
显示使用以下转义约定的寻址字符:
  • 将控制字符显示为后跟对应显示字符的 ~(波浪号)。
  • 将不可打印字符打印为 ~ (波浪号) <数字>,其中 数字 指定字符的十六进制值。 将 ~ 字符显示为 ~ ~(波浪号波浪号)。
d
以十进制显示。
D
显示长整型十进制数。
f
将 32 位值显示为浮点数。
F
显示双精度浮点数。
i 数字
作为指令显示。 Number 为指令占据的字节数。
n
显示新行。
o
以八进制显示两个字节。
O
以八进制显示四个字节。
p
使用与 a 格式字母相同的符号查找规则以符号格式显示寻址值。
q
显示当前基数中无符号的两个字节。
Q
显示当前基数中无符号的四个字节。
r
显示空格。
s 编号
显示寻址字符,直至达到字符 0。
S 数字
显示使用 ~(波浪号)转义约定的字符串。 Number 变量指定包含其 0 终结符的字符串的长度。
t
当以整数开头时,跳到下一个适当的制表符停止位。 例如:8t 格式命令移动到下一个 8 个空格的制表符停止位。
u
显示为无符号的十进制数字。
U
显示长整型无符号十进制数。
x
以十六进制显示两个字节。
X
以十六进制显示四个字节。
Y
以日期格式显示四个字节。
/
本地或全局数据符号。
?
本地或全局文本符号。
=
本地或全局绝对符号。
"..."
显示括起的字符串。
^
减少 (句点) 按当前增量。 未显示任何内容。
+
增大 (句点) ,值为 1。 未显示任何内容。
-
减少 (句点) 递减值 1。 未显示任何内容。
新行
重复先前的按 1 计数递增的命令。
[?/] l值掩码
开头的词。 (句点) 使用 Mask 值进行屏蔽,并与 Value 参数进行比较,直到找到匹配项为止。 如果使用了 L,那么一次要匹配 4 个字节而不是 2 个字节。 如果找不到匹配项,那么 (句点) 不变; 否则, (句点) 设置为匹配的位置。 如果省略了 Mask 参数,那么使用的值为 -1。
[?/] w...
将 2 字节 Value 参数写到寻址到的位置。 如果命令为 W,那么写 4 个字节。 如果命令为 V,那么写 1 个字节。 使用 wW 命令时,可应用对齐限制。
[,Count] [?/] m B1 E1 F1[?/]
记录 B1E1F1 参数的新值。 如果给定的表达式少于 3 个,那么不更改剩余的映射参数。 如果 ? (问号) 或 / (斜杠) 后跟 * (星号) ,第二段 (B2, E2, 映射的 F2) 已更改。 如果列表由 ? 终止 或 "/,文件(分别为ObjectFile或 "核心文件")将用于后续请求。 (例如, /m? 命令会使/指向ObjectFile) 文件。 如果指定了 Count 参数,那么 adb 命令仅更改与该文件或库相关的映射。 $m 命令显示对应于特殊文件的计数。 如果未指定 Count 参数,那么使用缺省值 0。
>名称
分配 a。 (句点) 到由 Name 参数指定的变量或寄存器。
!
调用 shell 以读取 ! 之后的行 开头。
$ 修饰符
其他命令。 Modifier 的可用值为:
<文件
从指定文件读取命令,并返回到标准输入。 如果指定计数为 0,那么将忽略此命令。 在执行 File 参数中的第一个命令之前,计数的值放在 adb 9 变量中。
<<文件
从指定文件读取命令,并返回到标准输入。 可以在文件中使用 <<文件 命令,而不会导致文件关闭。 如果指定计数为 0,那么忽略此命令。 在执行 File 中的第一个命令之前,计数的值放在 adb 9 变量中。 阿德布 9 变量在 <<文件 命令执行期间保存,并在 <<文件 完成时恢复。 可同时打开的 <<文件 命令的数量存在限制。
>文件
将输出发送到指定文件。 如果省略了 File 参数,那么输出返回到标准输出。 如果不存在 File 参数,那么创建它。
显示所有断点以及它们的相关计数和命令。
c
堆栈反向跟踪。 如果给出了 Address 参数,那么将它作为当前帧的地址使用(而不是使用帧指针寄存器)。 如果使用了格式字母 C,那么为每个活动功能显示所有自动和静态变量的名称和值。 如果给出了 Count 参数,那么仅显示 Count 参数指定的帧数。
将当前基数设为 Address 值,或者如果未指定地址,那么将该基数值设为 16。
e
显示外部变量的名称和值。 如果指定了计数,那么仅显示与该文件相关的外部变量。
f
以十六进制显示浮点寄存器。
i 指令集
选择用于反汇编的指令集。
i
-I 标记的指定将缺省目录更改为 Name 参数值。
m
显示地址映射。
n mnem_set
选择用于反汇编的助记符。
o
将当前基数值设置为 8。
q
退出 adb 命令。
R
打印常规寄存器和由 iar 寻址的指令,并设置 (句点) 到 iarNumber$r 参数显示 Number 变量指定的寄存器。 Number,Count$r 参数显示寄存器 Number+Count-1,...,Number
将符号匹配的限制设为 Address 值。 缺省值为 225。
v
以八进制显示所有非零变量。
w
设置 Address 参数的输出页面宽度。 缺省值为 80。
P 名称
Name 值作为提示字符串使用。
?
显示进程标识、导致中断或终止的信号以及 $r 的寄存器。
: 修饰符
管理子进程。 可用修饰符为:
b命令
Address 参数处设置断点。 在导致停止之前,断点运行 Count 参数 -1 次。 每次遇到该断点时,运行指定命令。 如果此命令设置 (句点) 到值 0 ,断点将导致停止。
c信号
继续带有指定信号的子进程。 如果给出了 Address 参数,那么在此地址继续子进程。 如果未指定信号,那么发送导致该子进程停止的信号。 跳过的断点与 r 修饰符的断点相同。
Address 参数处删除断点。
k
如果当前子进程正在运行,那么停止它。
R
ObjectFile 参数作为子进程运行。 如果明确给出了 Address 参数,那么在此点输入程序。 否则,在其标准入口点输入程序。 Count 参数指定在停止前将要忽略的断点数目。 可在同一行将子进程的参数作为命令提供。 以 <> 开头的自变量为命令建立标准输入或输出。 在子进程的入口处,所有信号均被打开。
s信号
继续单步执行子进程,直至达到 Count 参数中指定的数目。 如果当前没有子进程,那么将 ObjectFile 参数作为子进程运行。 在此情况下,任何信号均无法被发送。 将行的剩余部分作为子进程的参数对待。

adb 调试程序变量

adb 命令提供了大量变量。 启动 adb 程序时,从指定核心文件中的系统标题设置以下变量。 如果 CoreFile 参数不显示为 core 文件,那么从 ObjectFile 参数设置这些值:

0
上一次显示的值
1
指令源的上一个位移部分
2
1 变量的先前值
9
最后一个 $<$<< 子命令的计数
b
数据段的基地址
d
数据段的大小
e
程序的入口地址
m
魔数
s
堆栈段的大小
t
文本段的大小