7

我试图找到我的可加载内核模块被 insmod 重定位的内核地址空间。

我开始知道,通过在安装模块时使用 -m,-O 开关,我们只能从模块的角度看到符号表和可执行文件的部分地址,而不是它们的重定位地址,因为重定位的过程是在我们做一个insmod的时候进行的。

谁能告诉如何在内核内存中找到模块的重定位地址,即加载模块所在的内核中绑定的地址?

谢谢!

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

4

2 回答 2

12

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

于 2013-04-06T17:50:37.623 回答
9

您可以从 /proc/modules 文件中获取核心部分指针(虚拟地址,不是物理内存地址,但可以转换为物理地址)和模块的占用空间大小。

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

autofs4 29253 3 - Live 0xf9014000
hidp 23105 2 - Live 0xf900d000
rfcomm 42457 0 - Live 0xf8f84000
于 2013-03-21T03:16:32.800 回答