Linux内核调试:“Python异常 当尝试在gdb中使用帮助程序脚本时,没有名为module_core的成员
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核调试:“Python异常 当尝试在gdb中使用帮助程序脚本时,没有名为module_core的成员相关的知识,希望对你有一定的参考价值。
我一直在关注this guide,用gdb和VMWare建立一个Linux内核调试环境。一切都顺利进行,直到那部分:
将GDB连接到调试对象 我们将无法从加载的内核模块中看到符号。我们将加载帮助程序脚本,然后运行lx-symbols,它将探测已加载的模块并适当地配置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.
我的设置
调试器和debugee机器都是VM,debugee是Ubuntu 16.04,调试器是Ubuntu 18.04。
调试者:
$ 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
调试器:
$ 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兼容性问题所以我用python 2.7重新编译了gdb,但得到了完全相同的错误。
我还验证了它不是pwndbg
问题 - 我尝试使用vanilla gdb达到完全相同的效果。
我已经验证了python助手脚本是在编译debugee内核的过程中创建的。我实际上让整个构建过程完成而不是像创建指南一样创建脚本时停止它 - 只是为了确保所有脚本都到位。
我曾尝试在线查找错误,但似乎没有任何提及它。
有没有人遇到过这个问题?
在深入挖掘脚本和linux内核的来源后,我设法解决了这个问题。
问题在于this commit用module_core
标题中的module_layout
结构取代了include/linux/module.h
指针。这个变化显然被引入内核4.4.0,但直到更高版本才在助手脚本中解释。
这已经过了一段时间(特别是在this commit),所以4.4.0和4.6-rc1之间的所有内核版本都会有这个bug。
解决方案是从上述commit下载脚本并将它们放在相关目录中。
这当然是一个罕见的边缘案例,但我希望这个答案总有一天会对某人有所帮助。
以上是关于Linux内核调试:“Python异常 当尝试在gdb中使用帮助程序脚本时,没有名为module_core的成员的主要内容,如果未能解决你的问题,请参考以下文章