【发布时间】:2018-06-23 09:44:38
【问题描述】:
当我使用 kmalloc() 从我的内核模块中保留内存时,我得到一个以 0xffff (ffff9cf010feb000) 开头的地址。 但是模块从 0xffffffff (ffffffffc01a6000) 开始。
我正在尝试将模块 (ffffffffc01a6000) 中的代码重新定位到新的保留虚拟内存地址中。 但我无法重新定位调用偏移量,因为 32 位偏移量不足以从新区域 (ffff9cf010feb000) 引用到内核函数 (0xffffffff....)。
如何保留内存以便能够从新的虚拟地址调用? 或者如何从新的虚拟地址调用另一个虚拟地址?
接触编译器的 ASM 代码将是一个艰难的过程。 并制作一些mov地址,rax;用一些宏/函数调用 *rax 技巧可能是一个解决方案,但我不知道具体是怎么做的。
谢谢!
【问题讨论】:
标签: c linux memory linux-kernel