C 运行时可加载内核模块如何知道核心内核函数的地址?

C 运行时可加载内核模块如何知道核心内核函数的地址?,c,linux-kernel,kernel,C,Linux Kernel,Kernel,我对Linux和NT(或任何其他版本)的答案都感兴趣 编辑: 谢谢劳里奥的回答 更多信息请点击此处: 运行时加载程序通常在加载模块时修复对导入函数的引用。它查看导入函数表并输入正确的地址。该模块通过一个间接表使用导入的函数。之前为windows内核(和windows用户空间)编写了加载程序:其工作方式相同。基本上所有的二进制文件都有一个叫做IAT的东西(例如,这是永恒的经典文件)。当加载程序为DLL分配内存时,它会将DLL复制到那里,并读取DLL的IAT以获取它需要的所有符号(按名称),然

我对Linux和NT(或任何其他版本)的答案都感兴趣

编辑:

谢谢劳里奥的回答

更多信息请点击此处:


运行时加载程序通常在加载模块时修复对导入函数的引用。它查看导入函数表并输入正确的地址。该模块通过一个间接表使用导入的函数。

之前为windows内核(和windows用户空间)编写了加载程序:其工作方式相同。基本上所有的二进制文件都有一个叫做IAT的东西(例如,这是永恒的经典文件)。当加载程序为DLL分配内存时,它会将DLL复制到那里,并读取DLL的IAT以获取它需要的所有符号(按名称),然后在Windows core DLL的导出部分查找名称(例如kernel32.DLL),并用读取的地址填充它。在DLL可以继续执行之前,必须读取所有需要的文件并填充地址

Linux也以同样的方式工作……无论是用户空间还是内核。ELF结构称之为重定位表


希望有帮助:-)(详细信息与x86 arch类似)。

核心内核函数的地址可能会有所不同。。。至少在windows上谁能猜到?用另一个间接层解决问题!