gdb - модуль ядра загрузки для удаленной отладки

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
0
задан 6 July 2015 в 23:01

2 ответа

Добавьте .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

, если Вы отлаживаете удаленно по последовательному порту.

0
ответ дан 4 October 2019 в 01:16

Я нашел это, когда цель является другим xubuntu, также после работ для получения текстовых адресов:

(gdb) monitor lsmod
Module                  Size  modstruct     Used by
iptable_mangle         16384  0xffffffffc0f57040    1  (Live) 0xffffffffc0f55000 [ ]
...

затем можно использовать в другом месте зарегистрированные команды, чтобы сказать gdb смещение

(gdb) add-symbol-file mymodule 0xmymoduleaddress
1
ответ дан 4 October 2019 в 01:16

Другие вопросы по тегам:

Похожие вопросы: