网站大量收购闲置独家精品文档,联系QQ:2885784924

学习MSIL(微软间语言)的一系列教程 - MSIL入门示例教程.doc

学习MSIL(微软间语言)的一系列教程 - MSIL入门示例教程.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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.1378 Copyright (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.Program Emitting fields and methods: Global Class 1 Methods: 1; Emitting events and properties: Global Class 1 Writing PE file Operation 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

文档评论(0)

yuerang3062 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档