我正在尝试找到内核地址空间,我的可加载内核模块由insmod重新定位。
我开始知道通过在模块化模块时使用-m,-O开关,我们只能从模块的视点看到符号表和可执行文件的部分地址,而不是它们的重定位地址因为当我们进行insmod时会执行重定位过程。
任何人都可以告诉如何在内核内存中找到模块的重定位地址,即加载模块所在的内核中绑定的地址吗?
谢谢!
请注意,我使用的是Redhat 2.4 Linux内核,其中/ proc / modules列表未显示已加载模块的虚拟地址。
答案 0 :(得分:11)
转到目录/sys/module/<module-name>/sections/.text
- 将显示代码的加载位置
/sys/module/<module-name>/sections/.data
将显示模块的bss部分的数据部分和.bss。
答案 1 :(得分:9)
您可以从/ proc / modules文件获取核心部分指针(虚拟地址,不是物理内存地址,但可以转换为物理地址)和模块的占用空间大小。
例如我的Linux机器上的文件的一部分:
autofs4 29253 3 - Live 0xf9014000
hidp 23105 2 - Live 0xf900d000
rfcomm 42457 0 - Live 0xf8f84000