Ubuntu 14.04 LTS:
peter@peterubuntu0:$ insmod mymodule
peter@peterubuntu0:/sys/module/mymodule/sections$ cat .text .data .bss
0x0000000000000000
0x0000000000000000
0x0000000000000000
Таким образом, как я говорю gdb, где мой модуль загружается на целевой машине, когда я отлаживаю удаленно? Я использую просто смещения (так 0x64 или 64 десятичных числа для .text затем?)?
peter@peterubuntu0:~$ objdump mymodule.ko --section-headers
mymodule.ko: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 .note.gnu.build-id 00000024 0000000000000000 0000000000000000 00000040 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .text 0000b345 0000000000000000 0000000000000000 00000064 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
12 .data 000001e4 0000000000000000 0000000000000000 00012620 2**5
CONTENTS, ALLOC, LOAD, RELOC, DATA, LINK_ONCE_DISCARD
15 .bss 00000014 0000000000000000 0000000000000000 00012a80 2**3
ALLOC
Добавьте .gdbinit файл к своему корневому каталогу. Gdb получает этот файл, когда это запускается. В этом файле можно определить макросы для gdb, и можно выполнить нормальные команды оболочки также.
#gdb implementation of the linux lsmod
define gdblsmod
set $current = modules.next
set $offset = ((int)&((struct module *)0).list)
printf "Module\tAddress\n"
while($current.next != modules.next)
printf "%s\t%p\n", \
((struct module *) (((void *) ($current)) - $offset ) )->name ,\
((struct module *) (((void *) ($current)) - $offset ) )->module_core
set $current = $current.next
end
end
Этот макрос печатает адреса текстовых разделов для всех в настоящее время загруженных модулей. Откройте gdb консоль и тип gdblsmod
для использования этого. Можно поместить там также gdb команды как, например:
set serial baud 115200
, если Вы отлаживаете удаленно по последовательному порту.
Я нашел это, когда цель является другим xubuntu, также после работ для получения текстовых адресов:
(gdb) monitor lsmod
Module Size modstruct Used by
iptable_mangle 16384 0xffffffffc0f57040 1 (Live) 0xffffffffc0f55000 [ ]
...
затем можно использовать в другом месте зарегистрированные команды, чтобы сказать gdb смещение
(gdb) add-symbol-file mymodule 0xmymoduleaddress