如何获取已加载内核模块的基地址和大小?
答案1
我认为你可以使用/proc/modules
.它包含有关内核中当前加载的所有模块的信息。例如:
cat /proc/modules | grep i8k
结果可能是:
i8k 14696 0 - Live 0xffffffffa03b8000
在哪里:
- 第一列包含模块的名称。
- 第二列指模块的内存大小,以字节为单位。
- 第三列列出当前加载的模块实例数。零值表示已卸载的模块。
- 第四列说明该模块是否依赖于另一个模块才能运行,并列出了那些其他模块。
- 第五列列出了模块所处的负载状态:
Live
、Loading
或Unloading
。 - 内核虚拟地址空间中模块的基内存地址。
如果你运行:
awk '$1 ~ /i8k/ { print $1, $2, $6 }' /proc/modules
结果可能是,您需要的值:
i8k 14696 0xffffffffa03b8000
答案2
尺码/sys
我喜欢这个替代方案,因为它只给出一个值:
cat /sys/module/<module-name>/coresize
加载地址于pr_debug
如果启用pr_debug
,则存在该信息,并且如果模块在 处出现紧急情况,这可能会很有用init_module
。