随笔分类 -  .NET MSIL

摘要:When we declare a value type variable, we create a data structure. When we box this variable, an object (a class instance) is created whose data part is an exact bit copy of the data structure. Then w... 阅读全文
posted @ 2008-12-25 01:43 包建强 阅读(384) 评论(0) 推荐(0) 编辑
摘要:12.2第7章examine 翻译为分析 要统一full name的翻译 要统一 此外还有full class name 也要统一nested 翻译要统一power 还是翻译为乘方binary mask 二进制掩码 要查一遍 别错了 full picture 全景图 12.4开始校对第8章lower bound统一翻译为下界最高权重位,最高位——区别 在“修饰符”中,attach翻译成什么比较好?... 阅读全文
posted @ 2008-12-19 22:01 包建强 阅读(618) 评论(0) 推荐(0) 编辑
摘要:第6章 模块和程序集1.这一整段,请帮我确认一下Inthis regard, the IL assembler differs from other managed compilers (VB, C#, VC++), as those compilers require the specification of referenced assemblies via the file path ins... 阅读全文
posted @ 2008-12-18 22:34 包建强 阅读(681) 评论(4) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2008-12-14 18:36 包建强 阅读(1475) 评论(0) 推荐(0) 编辑
摘要:11.18 每章后面的summary统一翻译为小结。 此外,其他地方summary一般翻译为概要。 V-table统一翻译为V表. Stub翻译为存根 Section翻译为节,segment翻译为段 token翻译为标识 label翻译为标号,很多地方要改(原先翻译为标签) convention翻译为约定 local variable翻译为局部变量,貌似很多地方翻译错了 specification... 阅读全文
posted @ 2008-12-04 00:55 包建强 阅读(739) 评论(1) 推荐(0) 编辑
摘要:As a result of such positioning, the naming and versioning requirements for shared assemblies are much stricter than those for private assemblies. Names of shared assemblies must be globally uniq... 阅读全文
posted @ 2008-11-28 11:00 包建强 阅读(2953) 评论(2) 推荐(0) 编辑
摘要:AddressOfCallBacks: The VA of a null-terminated array of TLS callback function pointers.The array is null terminated, and as a result this field is never null and points to an all-zero pointer if no c... 阅读全文
posted @ 2008-11-24 14:45 包建强 阅读(820) 评论(0) 推荐(0) 编辑
摘要:从七月中旬开始,在家里整整四个月,直到今天,终于把这本书全部翻译出来了。开始还一边翻译一边去微软面试,后来发现,每次面试都要耗费我相当多的时间和精力去准备,以至于我的思路时断时续,到后来,我干脆不再去微软网站投简历,而是全身心地投入到IL的翻译和研究中。 这四个月是个漫长而枯燥的过程,每天最多只能翻译十一二页——因为书中没有太多的代码和耳熟能详的现实应用而经常是大段大段的概念和陌生的IL术语。幸亏... 阅读全文
posted @ 2008-11-14 23:24 包建强 阅读(1167) 评论(8) 推荐(0) 编辑
摘要:返回目录 看过类型是如何定义在CLR和ILAsm中的,让我们进入下一个问题:这些类型以及它们的派生是如何被分配到程序项——字段、变量等等。定义程序项类型的结果的结构被称为这些项的签名。签名创建于编码引用到各种各样的类和值类型;我将在本章详细讨论签名。 CLR中的基本类型 所有的类型必须要被定义于某处。Microsoft .NET Framework类库定义了上百个类型,而且其它程序集基于这... 阅读全文
posted @ 2008-09-13 16:50 包建强 阅读(1471) 评论(1) 推荐(0) 编辑
摘要:返回目录 类的扩充 在ILAsm中,和在Visual Basic和C#中,一个类的所有的成员、特性和内嵌类都在这个类的词法范围内声明。然而,ILAsm允许你重新打开一个已经关闭的类范围并定义额外的项: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-... 阅读全文
posted @ 2008-09-08 14:16 包建强 阅读(633) 评论(0) 推荐(0) 编辑
摘要:返回目录 值类型 值类型是CLR模型中最接近C++结构的。这些类型是一些带有平凡结构(例如,一个4字节整数)或复杂结构的值。当你声明一个类的类型的变量时,你不用自动创建一个类的实例。你只是创建了一个指向类的引用,初始化指向空。但是当你声明一个值类型的变量,这个值类型的实例立即被分配,通过变量声明本身,因为值类型是一个主要的数据结构。同样的,一个值类型必须有实例字段或大小的定义。一个0大小的值... 阅读全文
posted @ 2008-09-08 14:14 包建强 阅读(680) 评论(0) 推荐(0) 编辑
摘要:返回目录 类的特性 在前面的章节(“类的元数据”)列出了包括在一个类型定义中的各种信息。在最简单的情况中,当只涉及到TypeDef元数据表的时候,对于一个类型定义的ILAsm语法如下所示: .class extends { ... } 在.class指令中指定的值定义了TypeDef的Namespace和Name项,在.extends子句中指定的定义了Extends项,而... 阅读全文
posted @ 2008-09-08 14:08 包建强 阅读(608) 评论(0) 推荐(0) 编辑
摘要:返回目录 正如在前面章节所讨论的,CLR计算模型本质上是面向对象的。类的概念——或者,为了使用更加精确的运行时术语,类型的概念——围绕着整个被组织起来的计算模型的核心原则。一个项的类型——变量、常量、参数等等——定义了数据表示和这个项的行为特性。因此,一个类型可以被另一个代替只有当这两方面和这两种类型是相当的——例如,一个派生类可以被解释为它的父类的类型。 CLI的ECM... 阅读全文
posted @ 2008-09-08 13:57 包建强 阅读(992) 评论(0) 推荐(0) 编辑
摘要:返回目录 ExportedType元数据和声明 ExportedType元数据表包括了关于声明在程序集的非主要模块的公有类(在程序集外部可见)的信息。只有主模块的清单可以携带这个表。 之所以需要这个表是因为加载器希望一个程序集的主模块保存关于所有由程序集导出的类的信息。这些类——定义在主模块和ExportedType表中——的联合,给出了加载器一个完整的画面。 另... 阅读全文
posted @ 2008-09-02 16:30 包建强 阅读(961) 评论(0) 推荐(0) 编辑
摘要:返回目录 File元数据表和声明 File元数据表描述了在当前模块宗引用到的同一个程序集的其它文件。在单模块程序集中,这个表是空的(除非你想要详细指明非托管DLL作为你的部属的一部分,正如在本章前面所描述的)。这个表有如下的列结构: Flags(4字节宽位域):描述文件特征的二进制标记。为了将来使用,这个入口总是保留的,当前定义的唯一标记是ContainNoMetaData(0... 阅读全文
posted @ 2008-09-02 16:27 包建强 阅读(709) 评论(0) 推荐(0) 编辑
摘要:返回目录 AssemblyRef元数据表和声明 AssemblyRef(程序集引用)元数据表定义了一个程序集或模块的外部的依赖。主模块和非主要的模块可以——而且通常确实可以——包括这个表。唯一的一个不依赖于其它任何程序集的程序集,并因此而只有一个空的AssemblyRef表,是Mscorlib.dll,.NET Framework类库的根程序集。 AssemblyRef表的列结... 阅读全文
posted @ 2008-09-02 16:24 包建强 阅读(813) 评论(0) 推荐(0) 编辑
摘要:返回目录 本章讨论了程序集和模块的组织、部署和执行。它还对元数据片断提供了逐条的检查,负责程序集和模块的同一性和交互性:清单表(manifest)。正如你可能从第一章回想到的,一个程序集可以包括很多模块(托管的PE文件)。一个多模块程序集的任何模块可以——而且确实可以,一般地说——携带着它自己的清单表,但是每个程序集只有一个模块携带着这个清单表,其中包括了程序集的同一性。因此,每个程序集,... 阅读全文
posted @ 2008-08-30 23:10 包建强 阅读(711) 评论(0) 推荐(0) 编辑
摘要:返回目录 小结 讨论过托管映像文件的结构以及IL编译器生成这些文件的方式,我将小结一下IL编译器创建一个托管PE文件的步骤。PE文件的创建表现为以下4个步骤: 步骤1:初始化 1. 初始化内部缓冲器 2. 在内存创建一个PE文件的空模板,包括MS-DOS头和stub、PE签名、COFF头和PE头。 3. 输入地址表和CLR头被分配在.text区段中。 步... 阅读全文
posted @ 2008-08-27 23:51 包建强 阅读(812) 评论(1) 推荐(0) 编辑
摘要:返回目录 重定位区段 映像文件的.reloc区段包括了Fixup表,它为映像文件中的所有修正保存了入口。RVA和.reloc区段的大小都由PE头的Base Relocation表目录定义。Fixup表由很多块修正组成,每一块将这些修正保存为一个4KB的页。这些块都是按4字节排列的。 每一个修正都描述了映像文件中特定地址的位置,以及当加载这个映像文件到内存的时候,OS加载器应该如何修改这个位置上... 阅读全文
posted @ 2008-08-27 23:48 包建强 阅读(991) 评论(0) 推荐(0) 编辑
摘要:返回目录 CLR头 PE头的第15个目录入口包括了RVA和映像文件中的CLR头的大小。这个CLR头,包括了所有特定于CLR的数据入口和其他的信息,应该位于这个映像文件中的一段只读区段。IL编译器将CLR头放在了.text区段。 头的结构 CLR头定义在CorHdr.h中——一个头文件被分配为Microsoft .NET Framework SDK的一部分,如下: Code highlig... 阅读全文
posted @ 2008-08-27 23:40 包建强 阅读(1099) 评论(0) 推荐(0) 编辑