【发布时间】:2019-11-14 01:50:47
【问题描述】:
需要加载内核模块(*.ko)的内存地址,这样我可以在访问该地址时闯入系统。
似乎有很多帖子建议事后如何获取它,例如 /proc/modules。这很好,但这是事后的事。
即使在运行时加载、卸载模块也不能保证它总是在同一个地址加载。 如果有办法解决吗?我希望insmod有一个地址参数,但似乎我错了。
【问题讨论】:
-
到目前为止,我唯一的方法是始终先插入感兴趣的模块,或者始终以相同的顺序插入。每次重复该过程时重新启动系统 - 以获得相同的地址。
-
.ko文件中没有加载地址,所以不加载模块就无法获取该地址。 -
@Tsyvarev .ko 没有,但可能有其他方法可以获取它的加载位置?像模块句柄的内部运行时表,或“下一个空闲”句柄..(我想我需要阅读模块加载器在运行时如何创建地址..)
-
模块及其部分的内存是通过
module_alloc分配的,所以猜测它的结果就像猜测malloc的结果一样。顺便说一句,如果您只想在知道模块的加载地址但在加载模块之前调用某个内核函数,register_module_notifier是您的朋友。 -
@Tsyvarev 是的,谢谢你,这肯定会有所帮助。
标签: debugging linux-kernel linux-device-driver kernel-module