如何解决运行时可加载内核模块如何知道核心内核功能的地址?
| 我会对Linux和NT(或与此有关的任何其他产品)的答案感兴趣 编辑: 感谢Laurion的回答。 此处的更多信息: http://www.symantec.com/connect/articles/dynamic-linking-linux-and-windows-part-one http://www.symantec.com/connect/articles/dynamic-linking-linux-and-windows-part-two解决方法
在加载模块时,运行时加载器通常会修复对导入功能的引用。它查看导入的函数表并放入正确的地址。该模块通过间接表使用导入的功能。
, 之前已经为两个Windows内核(和Windows用户空间)编写了一个加载器:其工作方式相同。基本上所有二进制文件都有一个称为IAT的东西(例如,http://msdn.microsoft.com/zh-cn/magazine/cc301808.aspx,这是永恒的经典论文)。当加载程序为DLL分配内存时,它将在其中复制DLL,并读取DLL的IAT以获取其所需的所有符号(按名称),然后在Windows核心DLL的export部分中查找名称(例如, ,kernel32.dll),并用读取的地址填充它。在DLL可以继续执行之前,必须读取所有需要的文件并进行地址填充。
Linux也以相同的方式工作.....无论是用户空间还是内核。 ELF结构将其称为重定位表。
http://www.bravegnu.org/gnu-eprog/linker.html
希望对您有所帮助:-)(x86 arch的详细信息与此类似)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。