我试图找到我的可加载内核模块被 insmod 重定位的内核地址空间。
我开始知道,通过在安装模块时使用 -m,-O 开关,我们只能从模块的角度看到符号表和可执行文件的部分地址,而不是它们的重定位地址,因为重定位的过程是在我们做一个insmod的时候进行的。
谁能告诉如何在内核内存中找到模块的重定位地址,即加载模块所在的内核中绑定的地址?
谢谢!
PS 请注意,我使用的是 Redhat 2.4 Linux 内核,其中 /proc/modules 列表没有显示加载模块的虚拟地址。
我试图找到我的可加载内核模块被 insmod 重定位的内核地址空间。
我开始知道,通过在安装模块时使用 -m,-O 开关,我们只能从模块的角度看到符号表和可执行文件的部分地址,而不是它们的重定位地址,因为重定位的过程是在我们做一个insmod的时候进行的。
谁能告诉如何在内核内存中找到模块的重定位地址,即加载模块所在的内核中绑定的地址?
谢谢!
PS 请注意,我使用的是 Redhat 2.4 Linux 内核,其中 /proc/modules 列表没有显示加载模块的虚拟地址。
转到目录/sys/module/<module-name>/sections/.text
- 将显示代码的加载位置,
/sys/module/<module-name>/sections/.data
将显示模块的 bss 部分的数据部分和 .bss。
您可以从 /proc/modules 文件中获取核心部分指针(虚拟地址,不是物理内存地址,但可以转换为物理地址)和模块的占用空间大小。
比如我的 Linux 机器上的部分文件:
autofs4 29253 3 - Live 0xf9014000
hidp 23105 2 - Live 0xf900d000
rfcomm 42457 0 - Live 0xf8f84000