Отладка ядра Linux: «Исключение PythonПри попытке использовать вспомогательные сценарии в gdb нет члена с именем module_core. " - PullRequest
0 голосов
/ 15 сентября 2018

Я следовал этому руководству , чтобы настроить среду отладки ядра Linux с помощью gdb и VMWare. Все прошло гладко, пока эта часть:

Подключить GDB к отладчику
Мы пока не сможем увидеть символы из загруженных модулей ядра. Мы загрузим вспомогательный скрипт и затем запустим lx-символы, которые будут проверять загруженные модули и соответствующим образом настраивать GDB:
(gdb) source home/alambert/kernel/source/linux-4.13.0/debian/build/build-generic/vmlinux-gdb.py
(gdb) lx-symbols

При запуске этого в моей системе я получаю следующую ошибку Python:
pwndbg> source /home/user/kernel/source/linux-4.4.0/debian/build/build-generic/vmlinux-gdb.py pwndbg> lx-symbols loading vmlinux Python Exception <class 'gdb.error'> There is no member named module_core.: Error occurred in Python command: There is no member named module_core.

<Ч />

Моя настройка

И машины отладчика и - это виртуальные машины, отладчик - Ubuntu 16.04, а отладчик - Ubuntu 18.04.

Debugee:
$ cat /proc/version Linux version 4.4.0-134-generic (buildd@lgw01-amd64-033) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #160-Ubuntu SMP Wed Aug 15 14:58:00 UTC 2018

Debugger:
$ cat /proc/version Linux version 4.15.0-34-generic (buildd@lgw01-amd64-047) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018 $ gdb --version GNU gdb (GDB) 8.2 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. $ python -V Python 2.7.15rc1

<Ч />

Сначала я подумал, что это проблема совместимости с python3 / 2, поэтому я перекомпилировал gdb с python 2.7, но получил точно такую ​​же ошибку.

Я также убедился, что это не проблема pwndbg - я попробовал это с vanilla gdb с точно таким же эффектом.

Я убедился, что скрипты-помощники python были созданы в процессе компиляции ядра debugee. Я фактически позволил завершить весь процесс сборки, а не останавливать его после того, как сценарии были созданы, как подсказывает руководство, - просто чтобы убедиться, что все они на месте.

Я пытался найти ошибку в Интернете, но, похоже, о ней ничего не говорится.

Кто-нибудь когда-нибудь сталкивался с этой проблемой?

1 Ответ

0 голосов
/ 16 сентября 2018

После некоторого поиска исходных текстов скриптов и ядра linux мне удалось решить эту проблему.

Проблема заключается в этом коммите , который заменил указатель module_core структурой module_layout в заголовке include/linux/module.h. Это изменение, по-видимому, было перенесено в ядро ​​4.4.0, но не учитывалось в вспомогательных скриптах до более поздней версии.

Это было исправлено позже (в частности, в this commit ), поэтому все версии ядра между 4.4.0 и 4.6-rc1 будут иметь эту ошибку.

Решение состоит в том, чтобы загрузить сценарии из вышеупомянутого commit и поместить их в соответствующие каталоги.

Это, конечно, редкий случай, но я надеюсь, что этот ответ когда-нибудь кому-нибудь пригодится.

...