- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学习MSIL(微软间语言)的一系列教程 - MSIL入门示例教程
Microsoft Intermediate Language (MSIL)
一、一个Hello Word!程序
Microsoft .NET Framework 和 C# Programming Language 自诞生日起,就一直快速进化着。越来越庞大的类库,越来越多的封装,还有那越来越简单的语法糖,所有这些让我们离 本质 越来越远。尽管用这些优雅的语法并不妨碍我们开发出好而实用的产品,但作为一个资深的程序员,我们还是应该了解编译器背后的秘密。C# 并不代表 .NET CLR 的全部,就好比学习 LINQ,如果我们不试图去分析背后的执行流程,就很难理解所谓延迟执行机制。
MSIL 是一把锋利的手术刀,只有它能剖开层层 伪装,带我们深入到 .NET 的底层世界,去了解和结识许许多多被刻意隐藏起来的精灵。尽管它不是真正意义上的底层汇编语言,不能分析 JIT Complier 编译后的 Native Code,但总算能一窥托管编译器的奥秘。学习 MSIL 的目的,并不是真的要用它去编码,而是为了更好地 交流。
暂时离开那无比强大的 Visual Studio.NET,让我们用记事本开始 MSIL 的探索之旅。MyApp.il
.assembly extern mscorlib {auto}
.assembly MyApp {}
.module MyApp.exe
.namespace MyApp
{
.class public Program extends [mscorlib]System.Object
{
.method static private void Main(string[] args)
{
.entrypoint
ldstr Hello, World!
call void [mscorlib]System.Console::WriteLine(string)
nop
call string [mscorlib]System.Console::ReadLine()
pop
ret
}
}
}
打开 Visual Studio Command Prompt,使用 ILASM 开始编译。
E:\Develop\MSILilasm MyApp.il
Microsoft (R) .NET Framework IL Assembler. Version 2.0.50727.1378Copyright (c) Microsoft Corporation. All rights reserved.
Assembling MyApp.il to EXE -- MyApp.exe
Source file is UTF-8
Assembled method MyApp.Program::Main
Creating PE file
Emitting classes:Class 1: MyApp.ProgramEmitting fields and methods:GlobalClass 1 Methods: 1;Emitting events and properties:GlobalClass 1Writing PE fileOperation completed successfully
执行 MyApp.exe,就可看到熟悉的 Hello, World! 也就意味着我们完成了第一个 .NET 汇编 程序。
二、Code Structure
先了解一下 MSIL 程序代码最简单的结构组成,以便于我们开始后面的细节研究。还是以上节的 Hello, World! 为例。
Header
.assembly extern mscorlib { auto }
定义一个程序集引用信息。mscorlib.dll 包含了 .NET 的基本类型定义,几乎所有的托管引用程序都会用到它。当然我们还可以写得更具体一点。.assembly extern mscorlib
{
??.ver 2:0:0:0
??.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
.assembly MyApp {}
定义程序集。当然还可以包含更完整的版本信息。
.assembly Learn.CUI
{
?.ver 1:0:0:0
?.custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = { string(MyApp) }
?.custom instance void [msc
您可能关注的文档
- 如何搞好工厂物流管,降低物流成本.doc
- 如何撰写CoverLetter.doc
- 如何撰写外观设计专申请中的简要说明.doc
- 如何教育孩子养成良的学习习惯.doc
- 如何撰写度科技型中企业技术创新项目申报书.doc
- 如何有效开展初中英集体备课活动.doc
- 如何有效的开展小学术兴趣小组活动.doc
- 如何有效构建现代企的人力资源管理体系.doc
- 如何有效破解我校基性长线专业的就业难的困境.doc
- 如何有效进行代建制的范围管理.doc
- 某某单位2024年党建工作总结及2025年工作计划.doc
- 某某市发改委关于2024年度落实党风廉政建设工作责任制情况的报告.doc
- 某某局2024年全面从严治党和党风廉政建设工作总结.doc
- 某某区财政局2024年法治政府建设总结及2025年工作谋划.doc
- 2024年党管武装工作述职报告2篇.doc
- 2024年度国企党委书记抓基层党建工作述职报告3篇.doc
- 公司党委书记2024年述职述廉报告.docx
- 2024年度乡镇党委领导班子民主生活会(四个带头)对照检查材料.doc
- 市医疗保障局关于2024年法治政府建设工作情况的报告.docx
- 市民政局党组2024年巡察整改工作情况报告.docx
文档评论(0)