CorFlags.exe /32BIT+ 如何工作?

2024-02-25

我想我的问题是关于CLR http://en.wikipedia.org/wiki/Common_Language_Runtime装载机。我想了解背后的机制CorFlags.exe http://msdn.microsoft.com/en-us/library/ms164699%28v=vs.80%29.aspx /32BIT+功能。

我们知道,当一个人启动一个用Any CPU在 64 位 Windows 上设置标志,它作为 64 位进程启动。如果一跑CorFlags /32BIT+在该程序集上,它将作为 32 位进程启动。我认为这是一个令人着迷的功能。

我对此有很多疑问:

  1. 它是如何实施的?
  2. 操作系统加载程序是否参与其中?
  3. 是否可以构建一个根据需要加载 32 位或 64 位 CLR 的自定义应用程序(我猜是非托管应用程序)?

是否有文章、书籍、博客等解释此功能的内部工作原理?


据我所知,这在任何地方都没有详细记录,我只能向您指出相关的 MSDN 文章。是的,您的假设是正确的,Windows XP 及更高版本中的加载程序可以识别托管可执行文件。它会自动加载.NET加载程序垫片(c:\windows\system32\mscoree.dll),相关入口点是_CorValidateImage() http://msdn.microsoft.com/en-us/library/4ce9k7xb%28v=vs.90%29.aspx。链接的 MSDN 文章中的“备注”部分描述了将 32 位 .exe 文件转换为 64 位进程的机制:

在 Windows XP 及更高版本中,操作系统加载程序通过检查通用对象文件格式 (COFF) 标头中的 COM 描述符目录位来检查托管模块。设置位表示受管模块。如果加载程序检测到托管模块,它将加载 MsCorEE.dll 并调用 _CorValidateImage,后者执行以下操作:

  • 确认映像是有效的托管模块。
  • 将映像中的入口点更改为公共语言运行时 (CLR) 中的入口点。
  • 对于 64 位版本的 Windows,通过将内存中的映像从 PE32 转换为 PE32+ 格式来修改该映像。
  • 加载托管模块映像后返回到加载程序。

对于可执行映像,操作系统加载程序然后调用 _CorExeMain 函数,无论可执行文件中指定的入口点如何。对于 DLL 程序集映像,加载程序调用 _CorDllMain 功能。

_CorExeMain 或 _CorDllMain 执行以下操作:

  • 初始化 CLR。
  • 从程序集的 CLR 标头中定位托管入口点。
  • 开始执行。

加载器在托管模块时调用_CorImageUnloading函数 图像已卸载。然而,该函数不执行任何操作 行动;它只是返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CorFlags.exe /32BIT+ 如何工作? 的相关文章

随机推荐

  • 一对一关系的数据库设计

    我正在尝试完成项目数据模型的设计 但很难弄清楚该采用哪种方式 我有一个用户表 以及适用于该用户的未确定数量的属性 这些属性几乎在每种情况下都是可选的 因此允许空值 这些属性中的每一个对于用户来说都是一对一的 我应该将它们放在同一个表上 并在
  • 如果变量在线程之间共享,将变量标记为易失性是否有用? [复制]

    这个问题在这里已经有答案了 Notice 显然我没能向这里的每个人清楚地表达我的观点 这令人难以置信的沮丧 我的目标是消除这样的神话volatile实际上是一个空操作 它什么也不做 我并不是想声明它应该被使用 它是必要的 它不是多余的等等
  • 检测设备品牌

    我正在从事网络分析工作 我正在使用 JavaScript 客户端和 NodeJS 服务器端 我知道我们可以找到答案设备类型 https stackoverflow com questions 11381673 javascript solu
  • Komodo Edit 禁用自动完成

    我正在使用 Komodo Edit 8 它的自动完成功能非常烦人 当我打字时 for i 它会自动填充 for i in range code 现在我必须手动删除它才能继续输入 我尝试关闭 启用自动自动完成和键入时触发的调用提示 from
  • 在现有播放器上启用 YouTube API

    我有一个嵌入式 YouTube 视频 我希望应用 YouTube API 我使用 jQuery 添加 url 参数 如下所示 demo http jsfiddle net VVEY9 document ready function var
  • java字符串日期转换

    我想在存储字符串之前将其转换为日期 并且我使用了 SimpleDateFormat format new SimpleDateFormat yyyy mm dd Date returnDate format parse date 当我使用样
  • 在 MS SQL Server 2008 中创建序列

    我编写了一个程序 可以在其中请求身份证 有不同类型的身份证 红 蓝 绿 当提出请求时 程序应该生成标识号 数字 数字范围 取决于所请求的卡 Red Card 1 50000 Blue Card 50001 100000 Green Card
  • 为什么 VS Code 在 java 文件中显示 System.out.println() 的这些标签或参数名称?

    我已经安装了java扩展包 这件事从今天才开始发生 不确定这是由于某些 json 设置还是其他原因造成的 See 诸如 s x 和 参数名称之类的随机内容出现在我的打印语句中 https github com redhat develope
  • 如何强制执行不同的线程

    我有一个主线程执行一些 CPU 密集型操作 线程必须为其所有计算持有锁 还有一些其他线程偶尔需要在短时间内使用相同的锁 如果没有其他线程 如何强制主线程偶尔允许其他线程执行而不减慢速度 周期性的 lock release time slee
  • Linq Boolean 返回异常 DROPDOWNLIST 有一个无效的 SelectedValue,因为它不存在于项目列表中

    我有一个绑定到 linq 数据源的下拉列表 此下拉列表显示所有弓箭手编号 除了那些在数据库中状态设置为 false 的弓箭手编号 假设我有一条之前创建的记录 现在我想编辑现在设置为 false 的 Bowzer 我遇到了这个异常 我不知道如
  • apache-commons ftp 检索多个文件

    我正在尝试使用 apache commons net FTP lib 从 FTP 服务器获取数据 如果目录中只有 1 个文件 该代码可以正常工作 但在我第二次调用retrieveFileStream 时始终返回 null 有什么想法吗 我编
  • iOS6,UIWebView 和位置:固定

    我们有一个 PhoneGap 应用程序 其导航栏和选项卡栏 实现 为固定位置的 div 参见屏幕 1 在 iOS6 中 当显示键盘时 这些 div 会出现一些奇怪的行为 当我们输入第一个字母时 div 将消失 并显示空白区域 当我们关闭键盘
  • 多处理和 Selenium Python

    我有 3 个驱动程序 Firefox 浏览器 我希望它们能够do something在网站列表中 我有一个工人定义为 def worker browser queue while True id queue get True obj Rev
  • 在elasticsearch上查找具有空字符串值的文档

    我一直在尝试使用elasticsearch 仅过滤那些正文中包含空字符串的文档 到目前为止我还没有运气 在继续之前 我应该提到我已经尝试过many 解决方案 在 Interwebz 和 StackOverflow 上传播 因此 下面是我尝试
  • .NET LocalReport / .rdlc AppDomain 问题

    我正在使用 Microsoft Reporting WebForms LocalReport 和 rdlc 报告文件生成 pdf s 这是在 Windows 服务 NET 4 6 x64 VS2015 的后台完成的 我有两个问题 Windo
  • 多个 canActivate 防护在第一次失败时全部运行

    我有一条有两个人的路线canActivate警卫 AuthGuard and RoleGuard 首先 AuthGuard 检查用户是否已登录 如果没有 则重定向到登录页面 第二个检查用户是否定义了允许查看页面的角色 如果没有 则重定向到未
  • 为什么 imagemagick 中的 PNG 图像的 readimage 和 writeimage 需要花费大量时间?

    我正在使用 Imagemagick 版本 7 0 5 4 来执行图像处理操作 例如裁剪 调整大小等去图形 https github com gographics imagick图书馆 我还管理一个魔法棒对象池 Features Cipher
  • 常量折叠的具体规则是什么?

    我刚刚意识到 CPython 似乎对表示相同值的常量表达式的处理方式与常量折叠不同 例如 gt gt gt import dis gt gt gt dis dis 2 66 1 0 LOAD CONST 0 2 2 LOAD CONST 1
  • BigQuery 的速度是否足以满足实时现场请求

    我正在研究是否可以使用 BigQuery 及其 API 根据访问者查看的内容进行现场查询 因此 响应时间至关重要 我加载了一个包含 10k 行 4 列 的非常简单的结构化数据集 并运行了一个非常简单的查询 这需要 1 到 2 秒的时间 希望
  • CorFlags.exe /32BIT+ 如何工作?

    我想我的问题是关于CLR http en wikipedia org wiki Common Language Runtime装载机 我想了解背后的机制CorFlags exe http msdn microsoft com en us l