| 第一部分 快速入门第1章 简单示例 21.1 CLR基础 21.2 简单示例:The Code 51.2.1 程序头 71.2.2 类声明 81.2.3 字段声明 91.2.4 方法声明 101.2.5 全局项 141.2.6 映射字段 161.2.7 数据声明 161.2.8 作为占位符的值类型 171.2.9 调用非托管代码 171.3 类的预先声明 181.4 小结 20第2章 代码增强 212.1 精简代码 212.2 保护代码 232.3 小结 28第3章 使代码更简单 293.1 别名 293.2 编译控制伪指令 313.3 关联当前类及其引用项 343.4 小结 35第二部分 底层结构第4章 托管可执行文件的结构 384.1 PE/COFF头 394.1.1 MS-DOS头/Stub和PE签名 404.1.2 COFF头 404.1.3 PE头 434.1.4 节头 474.2 CLR头 494.2.1 头结构 504.2.2 Flags字段 514.2.3 EntryPointToken字段 524.2.4 VTableFixups字段 524.2.5 StrongNameSignature字段 534.2.6 重定位节 534.2.7 文本节 554.2.8 数据节 564.2.9 数据常量 564.2.10 V表 574.2.11 非托管导出表 574.2.12 线程局部存储(TLS) 594.2.13 资源 604.2.14 非托管资源 604.2.15 托管资源 624.3 小结 634.3.1 第一阶段:初始化 634.3.2 第二阶段:源代码解析 634.3.3 第三阶段:映像生成 634.3.4 第四阶段:完成 64第5章 元数据表的组织 655.1 什么是元数据 655.2 堆和表 675.2.1 堆 675.2.2 通用元数据头 685.2.3 元数据表流 705.3 RID和标记 735.3.1 RID 735.3.2 标记 735.3.3 编码标记 755.4 元数据有效性检查 785.5 小结 79第三部分 基本组件第6章 模块和程序集 826.1 什么是程序集 826.2 私有程序集和共享程序集 826.3 作为逻辑执行单元的应用程序域 836.4 清单 846.5 Assembly元数据表和声明 866.6 AssemblyRef元数据表和声明 876.7 加载程序搜索程序集 896.8 Module元数据表和声明 926.9 ModuleRef元数据表和声明 926.10 File元数据表和声明 936.11 托管资源元数据表和声明 946.12 ExportedType元数据表和声明 976.13 ILAsm中清单声明的次序 986.14 单模块程序集和多模块程序集 996.15 元数据有效性规则概要 1006.15.1 Assembly表有效性规则 1006.15.2 AssemblyRef表有效性规则 1006.15.3 Module表有效性规则 1016.15.4 ModuleRef表有效性规则 1016.15.5 File表有效性规则 1016.15.6 ManifestResource表有效性规则 1016.15.7 ExportedType表有效性规则 102第7章 命名空间和类 1037.1 类的元数据 1047.1.1 TypeDef元数据表 1057.1.2 TypeRef元数据表 1067.1.3 InterfaceImpt元数据表 1067.1.4 NestedClass元数据表 1067.1.5 ClassLayout元数据表 1077.2 命名空间和类的完整名称 1077.2.1 ILAsm命名约定 1087.2.2 命名空间 1097.2.3 类的完整名称 1107.3 类的特性 1117.3.1 标志 1117.3.2 类的可见性和友元程序集 1137.3.3 类的引用 1137.3.4 父类型 1147.3.5 接口实现 1147.3.6 类的布局信息 1157.4 接口 1157.5 值类型 1177.5.1 值的装箱和拆箱 1177.5.2 值类型的实例成员 1187.5.3 值类型的派生 1187.6 枚举 1197.7 委托 1197.8 嵌套类型 1217.9 类的扩充 1237.10 元数据有效性规则概要 1257.10.1 TypeDef表有效性规则 1257.10.2 特定于枚举的有效性规则 1267.10.3 TypeRef表有效性规则 1267.10.4 InterfaceImpt表有效性规则 1267.10.5 NestedClass表有效性规则 1277.10.6 ClassLayout表有效性规则 127第8章 基本类型和签名 1288.1 CLR中的基本类型 1288.1.1 基本数据类型 1288.1.2 数据指针类型 1298.1.3 函数指针类型 1318.1.4 向量和数组 1318.1.5 修饰符 1338.1.6 本地类型 1348.1.7 可变类型 1368.2 签名中类的表示 1388.3 签名 1398.3.1 调用约定 1398.3.2 字段签名 1398.3.3 方法和属性签名 1408.3.4 MemberRef签名 1408.3.5 间接调用签名 1418.3.6 局部变量签名 1418.3.7 类型说明 1428.4 签名有效性规则概要 143第9章 字段和数据常量 1449.1 字段元数据 1449.1.1 定义字段 1459.1.2 引用字段 1469.2 实例字段和静态字段 1479.3 默认值 1479.4 映射字段 1509.5 数据常量声明 1519.6 显式布局和联合声明 1529.7 全局字段 1559.8 构造函数与数据常量 1569.9 元数据有效性规则概要 1589.9.1 Field表有效性规则 1599.9.2 FieldLayout表有效性规则 1599.9.3 FieldRVA表有效性规则 1599.9.4 FieldMarshal表有效性规则 1609.9.5 Constant表有效性规则 1609.9.6 MemberRef表有效性规则 160第10章 方法 16110.1 方法元数据 16110.1.1 Method表的记录字段 16210.1.2 方法标志 16210.1.3 方法名称 16410.1.4 方法实现标志 16510.1.5 方法参数 16610.1.6 引用方法 16710.1.7 方法实现元数据 16810.2 静态方法、实例方法和虚方法 16810.3 显式方法重写 17210.4 方法重写和可访问性 17710.5 方法头特性 17810.6 局部变量 18010.7 类的构造函数 18110.7.1 类的构造函数和beforefieldinit标志 18210.7.2 模块构造函数 18410.8 实例构造函数 18410.9 实例终结器 18610.10 可变参数列表 18710.11 方法重载 18910.12 全局方法 19110.13 元数据有效性规则概要 19110.13.1 Method表有效性规则 19210.13.2 Param表有效性规则 19310.13.3 MethodImpl表有效性规则 193第11章 泛型类型 19511.1 泛型类型元数据 19611.1.1 GenericParam元数据表 19811.1.2 GenericParamConstraint元数据表 19811.1.3 TypeSpec元数据表 19911.2 约束标志 19911.3 在ILAsm中定义泛型类型 19911.4 类型参数寻址 20011.5 泛型类型实例化 20111.6 定义泛型类型:继承、实现、约束 20211.7 定义泛型类型:循环依赖 20311.8 泛型类型的成员 20511.9 嵌套泛型类型 21011.10 元数据有效性规则概要 213第12章 泛型方法 21412.1 泛型方法元数据 21412.2 泛型方法签名 21612.3 在ILAsm中定义泛型方法 21612.4 调用泛型方法 21712.5 重写虚泛型方法 21912.6 元数据有效性规则概要 223第四部分 深入执行引擎第13章 IL指令 22613.1 长参数和短参数指令 22713.2 标号和流程控制指令 22713.2.1 无条件转移指令 22813.2.2 有条件转移指令 22813.2.3 比较转移指令 22813.2.4 switch指令 23013.2.5 break指令 23013.2.6 托管EH块退出指令 23013.2.7 托管EH块结束指令 23113.2.8 ret指令 23113.3 运算指令 23113.3.1 栈处理 23113.3.2 常量加载 23213.3.3 间接加载 23313.3.4 间接存储 23313.3.5 算术操作 23413.3.6 溢出算术操作 23513.3.7 位操作 23613.3.8 移位操作 23613.3.9 转换操作 23713.3.10 溢出转换操作 23813.3.11 逻辑条件检查指令 23813.3.12 块操作 23913.4 寻址参数和局部变量 23913.4.1 方法参数加载 23913.4.2 方法参数地址加载 24013.4.3 方法参数存储 24013.4.4 方法参数列表 24013.4.5 局部变量加载 24013.4.6 局部变量引用加载 24113.4.7 局部变量存储 24113.4.8 局部块分配 24113.4.9 前缀指令 24113.5 寻址字段 24213.6 调用方法 24313.6.1 直接调用 24313.6.2 间接调用 24413.6.3 尾部调用 24513.6.4 带约束的虚调用 24613.7 寻址类和值类型 24713.8 向量指令 25013.8.1 向量创建 25013.8.2 元素地址加载 25113.8.3 元素加载 25113.8.4 元素存储 25213.9 代码可验证性 252第14章 托管异常处理 25514.1 EH子句的内部表示 25514.2 EH子句的类型 25614.3 EH子句声明的标号格式 25814.4 EH子句声明的作用域格式 25914.5 处理异常 26214.6 异常类型 26414.6.1 加载程序异常 26414.6.2 JIT编译器异常 26414.6.3 执行引擎异常 26514.6.4 互操作异常 26614.6.5 子类异常 26614.6.6 非托管异常映射 26614.7 EH子句结构化规则概要 267第五部分 特殊组件第15章 事件和属性 27015.1 事件和委托 27015.2 事件元数据 27315.2.1 Event表 27315.2.2 EventMap表 27415.2.3 MethodSemantics表 27415.3 事件声明 27515.4 属性元数据 27715.4.1 Property表 27815.4.2 PropertyMap表 27915.5 属性声明 27915.6 元数据有效性规则概要 28015.6.1 Event表有效性规则 28015.6.2 EventMap表有效性规则 28115.6.3 Property表有效性规则 28115.6.4 PropertyMap表有效性规则 28115.6.5 MethodSemantics表有效性规则 281第16章 自定义特性 28316.1 自定义特性的概念 28316.2 CustomAttribute元数据表 28416.3 自定义特性的值编码 28516.4 自定义特性的逐字描述 28716.5 自定义特性声明 28816.6 自定义特性的分类 29116.6.1 执行引擎和JIT编译器 29216.6.2 互操作子系统 29316.6.3 安全 29516.6.4 Remoting子系统 29616.6.5 Visual Studio调试器 29716.6.6 程序集链接器 29716.6.7 公共语言规范(CLS)兼容性 29816.6.8 伪自定义特性 29816.7 元数据有效性规则概要 300第17章 安全特性 30117.1 声明性安全 30117.2 声明性操作 30217.3 安全许可权限 30317.3.1 访问许可权限 30317.3.2 身份许可权限 30617.3.3 自定义许可权限 30817.3.4 许可权限集 30917.4 声明性安全元数据 31017.5 许可权限集的Blob编码 31117.6 安全特性声明 31117.7 元数据有效性规则概要 312第18章 托管代码和非托管代码的互操作 31418.1 Thunk和包装器 31518.1.1 P/Invoke Thunk 31518.1.2 实现映射元数据 31718.1.3 IJW Thunk 31718.1.4 COM可调用包装器 31818.1.5 运行时可调用包装器 31918.2 数据封送 32018.2.1 blittable类型 32018.2.2 in/out参数 32118.2.3 字符串封送 32218.2.4 对象封送 32318.2.5 更多对象封送 32418.2.6 数组封送 32518.2.7 委托封送 32518.3 为非托管代码提供托管方法作为回调 32618.4 作为非托管导出的托管方法 32818.5 小结 334第19章 多语言工程 33619.1 IL反汇编器 33619.2 双向解析的原则 34019.3 创造性的双向解析 34119.4 使用类的扩充 34219.5 通过双向解析进行模块链接 34219.6 ASMMETA:解决循环依赖 34419.7 内嵌在高级语言中的IL 34619.8 在调试模式下编译 34719.9 小结 352第六部分 附录附录A ILAsm语法 356附录B 元数据表 376附录C IL指令集 387附录D IL汇编器和IL反汇编器的命令行选项 394附录E 离线验证工具 399部分术语翻译说明 416 |
商品评论(0条)