【问题标题】:How to get load address of .ko module before it is inserted?如何在插入之前获取.ko模块的加载地址?
【发布时间】: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


【解决方案1】:

我正在用答案结束我自己的问题。

最佳评论或答案是上面 cmets 中的@Tsyvarev。注释 - 请参阅 register_module_notifier - 告诉您如何在运行时获取地址 - 在您自己的代码中说。 (我没用过,因为不需要)。

就我而言,我需要它来使用外部硬件监视器进行调试,并且我可以同样设置调试器以在需要时中断 module_alloc 上的系统。 (而且我可以控制何时加载特定模块。)

因此,总而言之 - 以上两种方式 - 这里解释了如何在模块“加载”之前获取地址。

【讨论】:

    猜你喜欢
    • 2015-01-14
    • 2019-04-13
    • 2011-03-09
    • 2019-12-02
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多