- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习MSIL(微软中间语言)的一系列教程MSIL入门示例教程
Microsoft Intermediate Language(msil)
第 PAGE 29 頁,共 NUMPAGES 29 頁
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.AssemblyTitleAtt
您可能关注的文档
- 味特餐饮管理系统操作说明.doc
- 咨询审查合同.docx
- 咨询型课程名称高绩效(非财务)品值管理指(值)标体系测评工具.doc
- 咨询式培训帮助企业解决问题的利器.doc
- 咨询服务协议(沈总).docx
- 咨询服务合同(涉外咨询业务)范本.doc
- 咨询师二级案例攻击性儿童心理咨询案例报告.doc
- 咨询类问题.docx
- 咨询服务合同范本(修改).doc
- 咸宁市中心医院检验科重点专科工作汇报.doc
- 储节旺《AI驱动图书馆智慧化转型的喜与忧》.pdf
- 深度解析(2026)《GBT 15709-1995交流电气化铁道接触网无线电辐射干扰测量方法》.pptx
- 深度解析(2026)《GBT 15712-2016非调质机械结构钢》.pptx
- 深度解析(2026)《GBT 15721.3-2009假肢与矫形器 肢体缺失 第3部分:上肢截肢残肢的描述方法》.pptx
- 深度解析(2026)《GBT 15721.1-2009假肢与矫形器 肢体缺失 第1部分:先天性肢体缺失状况的描述方法》.pptx
- 深度解析(2026)《GBT 15725.6-1995实验室玻璃仪器 磨口烧瓶》.pptx
- 深度解析(2026)《GBT 15733-1995金融电子化基本术语》.pptx
- 深度解析(2026)《GBT 15732-1995汉字键盘输入用通用词语集》.pptx
- 深度解析(2026)《GBT 15752-1995圆弧圆柱齿轮基本术语》.pptx
- 深度解析(2026)《GBT 15743-1995轿车侧门强度》.pptx
最近下载
- 平陆运河建设对区域经济影响的研究.docx VIP
- 2023年辽宁省大连市中考一模语文试题(含答案).pdf VIP
- 4.2 中国的工业-2023-2024学年八年级地理上册同步精品课件(湘教版).pptx VIP
- 粉色插画风医院感染基础知识培训PPT模板.pptx VIP
- 西宁市2024-2025学年九年级上学期语文期末测试试卷.doc VIP
- 湘教版八年级上册第四章中国的主要产业+第二节工业 (共18张PPT).pptx VIP
- 高品质ppt模板▏院感手卫生知识培训课件.pptx VIP
- 学堂在线兵棋期末考试答案.docx VIP
- 网络安全等级保护-重大风险隐患项描述实践指南(【2025】测评报告新增).docx VIP
- 八上第四单元--经济与文化---第3课--工业的分布-(第2课时).doc VIP
原创力文档


文档评论(0)