首页 > 解决方案 > 动态链接如何与 CLR 可执行文件一起工作?

问题描述

这是我要问的一个理论问题,因为我知道动态链接如何与常规 .exe 一起工作。您链接目标文件和.lib,它用跳转到导入表替换函数调用,然后在运行时动态链接器在当前目录或system32中找到模块,并用导出表中的地址填充导入表dll。大致是这样的。

但是使用 .NET,它会编译为 .exe,我认为在 .text 部分的开头有一个 CLR 标头/CLR 数据,并且 CLR 数据包含 CIL 代码。我假设入口点所在的 .text 部分的其余部分链接到 MSCorEE.dll,这可能会将指向 CLR 标头/数据的指针传递给 MSCorEE.dll 函数之一。

我的问题是原始程序的 CIL 代码如何与将要使用的模块动态链接,假设 .NET 程序调用 kernel32.dll 中的函数。如果 CIL 是即时编译的,如何将 CIL 中的这些函数调用解析为加载到程序地址空间中的 kernel32.dll 中的地址?是否有单独的动态链接器可以在 CIL 代码中插入导入表函数的地址,然后再将其编译为 x86?

标签: .netwindowsexeclr

解决方案


推荐阅读