反汇编函数时,gdb将以 16 为基数显示内存地址,但以 10 为基数显示偏移量。
例子:
(gdb) disassemble unregister_sysctl_table
Dump of assembler code for function unregister_sysctl_table:
0x00037080 <+0>: push %ebp
0x00037081 <+1>: mov %esp,%ebp
0x00037083 <+3>: sub $0x14,%esp
0x00037086 <+6>: mov %ebx,-0xc(%ebp)
0x00037089 <+9>: mov %esi,-0x8(%ebp)
0x0003708c <+12>:mov %eax,%ebx
0x0003708e <+14>:mov %edi,-0x4(%ebp)
函数偏移量<+N>
在地址旁边,如您所见,它们以 10 为基数。
当 Linux 内核崩溃时,它会显示使用 base 16 的回溯:
[ 0.524380] [<c10381d5>] unregister_sysctl_table+0x65/0x70
必须将回溯地址从 base 16 转换为 base 10 才能找到所需的指令,这非常烦人。
可以告诉gdb以 16 个偏移量显示反汇编输出吗?