如何获取使用 insmod 插入的内核模块的地址?
我想知道内核模块的地址。实际上,从堆栈跟踪来看,崩溃是由内核模块触发的(系统启动后已插入)。有几个模块是我手动安装的。所以我需要检测其中哪个模块触发了崩溃。请让我知道如何获取使用 insmod 加载的每个模块的地址。
I would like to know the address of a kernel module. Actually, from stack trace it looks that the crash has been triggered from a kernel module (which have been insmoded after system boots up). There are several modules I insmod manually. So I need to detect which module among these is triggering the crash. Please let me know how to get the address of each modules loaded using insmod.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
cat /proc/modules
应该为您提供加载内容的粗略指南。通过查看/proc/kallsyms
,您可能会获得更多关于内核崩溃的确切位置的线索。cat /proc/modules
should give you a rough guide to where things are loaded. You might get more of a clue about exactly where the kernel crash is by looking at/proc/kallsyms
./sys/module//sections/
包含模块所有部分的地址。由于大多数部分都以点 (.
) 开头,因此在列出此目录内容时,不要忘记将-a
传递给ls
:/sys/module/<MODULE_NAME>/sections/
contains addresses of all sections of your module. Since most section begin with a dot (.
), don't forget to pass-a
tols
when listing this directory content:pr_debug
on dmesg如果我们启用
pr_debug
,那么它会显示加载模块的基地址。例如,如果模块在
init_module
处发生紧急情况并且您无法交互读取/proc/modules
,这可能会很有用。启用 pr_debug 的最佳方法是使用 CONFIG_DYNAMIC_DEBUG=y 编译内核,如下所述:为什么是Linux 内核的 pr_debug 没有给出任何输出?
然后当你这样做时:
我们看到一行形式:
其中包含基地址。
pr_debug
on dmesgIf we enable
pr_debug
, then it shows the base address the module was loaded at.This can be useful for example if the module panics at
init_module
and you can't read/proc/modules
interactively.The best way to enable
pr_debug
is to compile the kernel withCONFIG_DYNAMIC_DEBUG=y
as explained at: Why is pr_debug of the Linux kernel not giving any output?Then when you do:
we see a line of form:
which contains the base address.