При разборке функций 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, отображается обратная трассировка с использованием базы 16:
[ 0.524380] [<c10381d5>] unregister_sysctl_table+0x65/0x70
Это оченьраздражает необходимость преобразовывать адреса обратной трассировки из базы 16 в базу 10. чтобы можно было найти нужную инструкцию.
Можно ли gdb показать вывод вывода разборки со смещением базы 16?