- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习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
- 基层检察实践新探:J省S县羁押必要性审查的实证剖析与路径优化.docx
- 金融衍生品风险剖析与美国《金融监管改革法案》的多维审视.docx
- 论中小学教师批评权的法理基础与法律保障构建.docx
- 环境伦理引领下的环境法变革与重塑:理论、困境与实践进路.docx
- 结核分枝杆菌耐药状况剖析:机制、监测与应对策略.docx
- 全髋关节置换术与切开复位内固定术治疗老年股骨颈骨折疗效的Meta分析:基于多维度数据的精准剖析.docx
- 新课标高中优秀作文精品集锦.doc
- 新时期师德师风现状及其对策思考.doc
- R公司员工激励机制深度剖析与创新路径.docx
- 英语报刊隐喻剖析与汉译策略探索:基于跨文化视角.docx
文档评论(0)