.net - 动态链接如何与 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?
解决方案
推荐阅读
- sql - 如何在没有错误缩进的情况下正确格式化 SQL 文件?
- javascript - 单击扩展程序的图标时,有没有办法添加 HTML
- reactjs - React TS - 如何将道具从父组件传递给深度嵌套的子组件
- android - Android文件存储(文档路径)
- arduino - ESP32 异步网络服务器
- java - 转换 Java 地图
> 到地图 > - mysql - 将 MySQL 时间戳设置为过去 24 小时内的随机时间
- android - Wear OS 应用程序:禁用所有可能的选项以关闭 android 手表上的应用程序
- android - 为什么不设置这个值?
- javascript - 为什么我无法读取 null 错误的属性“addEventListener”?