这是我要提出的理论问题,因为我知道动态链接如何与常规.exe一起使用。您将目标文件和.lib链接起来,它将跳转替换为导入表中的函数调用,然后在运行时,动态链接器在当前目录或system32中找到模块,并使用来自导入表的地址填充导入表。 dll。大概就是这样。
但是,使用.NET时,它会编译为.exe文件,我认为该文件在.text节的开头具有CLR标头/ CLR数据,并且CLR数据包含CIL代码。我假设入口点是.text部分的其余部分,它链接到MSCorEE.dll,它可能会将指向CLR标头的指针/数据传递给MSCorEE.dll函数之一。
我的问题是,原始程序的CIL代码如何动态链接到将要使用的模块,可以说.NET程序调用kernel32.dll中的函数。如果CIL是即时编译的JIT,那么如何将CIL中的这些函数调用解析为已加载到程序地址空间中的kernel32.dll中的地址?是否有一个单独的动态链接器,可以在将其编译为例如CIL代码之前在CIL代码中插入导入表函数的地址。 x86?