查找可加载内核模块的内核地址

fre*_*eax 7 linux kernel kernel-module linux-kernel embedded-linux

我正在尝试找到内核地址空间,我的可加载内核模块由insmod重新定位.

我开始知道通过在修改模块时使用-m,-O开关,我们只能从模块的视点看到符号表和可执行文件的部分地址,而不是它们的重定位地址,因为我们做insmod时进行搬迁过程.

任何人都可以告诉如何在内核内存中找到模块的重定位地址,即加载模块所在的内核中绑定的地址?

谢谢!

PS请注意我使用的是Redhat 2.4 Linux内核,其中/ proc/modules列表没有显示已加载模块的虚拟地址.

小智 11

转到目录/sys/module/<module-name>/sections/.text- 将显示代码加载的位置 /sys/module/<module-name>/sections/.data将显示数据部分和.bss为模块的bss部分.

  • 快速提示:你需要root来获取cat /sys/module/module-name-here/sections/.*这些东西才能工作..(否则它只显示值0x0). (5认同)

tia*_*eng 9

您可以从/ proc/modules文件获取核心节指针(虚拟地址,不是物理内存地址,但可以转换为物理地址)和模块的封装大小.

比如我的Linux机箱上的部分文件:

autofs4 29253 3 - Live 0xf9014000
hidp 23105 2 - Live 0xf900d000
rfcomm 42457 0 - Live 0xf8f84000
Run Code Online (Sandbox Code Playgroud)