《.NET探秘 MSIL权威指南》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:SergeLidin编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2009
  • ISBN:9787115201768
  • 页数:421 页
图书介绍:本书是IL汇编语言的权威之作,全面深入地讲解了IL的全部内容,对于从概念设计到实现和维护的软件开发所有阶段都很有价值。本书对于目前各个版本的.NET Framework而言都是适用的。

第一部分 快速入门 2

第1章 简单示例 2

1.1 CLR基础 2

1.2简单示例:The Code 5

1.2.1程序头 7

1.2.2类声明 8

1.2.3字段声明 9

1.2.4方法声明 10

1.2.5全局项 14

1.2.6映射字段 16

1.2.7数据声明 16

1.2.8作为占位符的值类型 17

1.2.9调用非托管代码 17

1.3类的预先声明 18

1.4小结 20

第2章 代码增强 21

2.1精简代码 21

2.2保护代码 23

2.3小结 28

第3章 使代码更简单 29

3.1别名 29

3.2编译控制伪指令 31

3.3关联当前类及其引用项 34

3.4小结 35

第二部分 底层结构 38

第4章 托管可执行文件的结构 38

4.1 PE/COFF头 39

4.1.1 MS-DOS头/Stub和PE签名 40

4.1.2 COFF头 40

4.1.3 PE头 43

4.1.4节头 47

4.2 CLR头 49

4.2.1头结构 50

4.2.2 Flags字段 51

4.2.3 EntryPointToken字段 52

4.2.4 VTableFixups字段 52

4.2.5 StrongNameSignature字段 53

4.2.6重定位节 53

4.2.7文本节 55

4.2.8数据节 56

4.2.9数据常量 56

4.2.10 V表 57

4.2.11非托管导出表 57

4.2.12线程局部存储(TLS) 59

4.2.13资源 60

4.2.14非托管资源 60

4.2.15托管资源 62

4.3小结 63

4.3.1第一阶段:初始化 63

4.3.2第二阶段:源代码解析 63

4.3.3第三阶段:映像生成 63

4.3.4第四阶段:完成 64

第5章 元数据表的组织 65

5.1什么是元数据 65

5.2堆和表 67

5.2.1堆 67

5.2.2通用元数据头 68

5.2.3元数据表流 70

5.3 RID和标记 73

5.3.1 RID 73

5.3.2标记 73

5.3.3编码标记 75

5.4元数据有效性检查 78

5.5小结 79

第三部分 基本组件 82

第6章 模块和程序集 82

6.1什么是程序集 82

6.2私有程序集和共享程序集 82

6.3作为逻辑执行单元的应用程序域 83

6.4清单 84

6.5 Assembly元数据表和声明 86

6.6 AssemblyRef元数据表和声明 87

6.7加载程序搜索程序集 89

6.8 Module元数据表和声明 92

6.9 ModuleRef元数据表和声明 92

6.10 File元数据表和声明 93

6.11托管资源元数据表和声明 94

6.12 ExportedTType元数据表和声明 97

6.13 ILAsm中清单声明的次序 98

6.14单模块程序集和多模块程序集 99

6.15 元数据有效性规则概要 100

6.15.1 Assembly表有效性规则 100

6.15.2 AssemblyRef表有效性规则 100

6.15.3 Module表有效性规则 101

6.15.4 ModuleRef表有效性规则 101

6.15.5 File表有效性规则 101

6.15.6 ManifestResource表有效性规则 101

6.15.7 ExportedType表有效性规则 102

第7章 命名空间和类 103

7.1类的元数据 104

7.1.1 TypeDef元数据表 105

7.1.2 TypeRef元数据表 106

7.1.3 InterfaceImpt元数据表 106

7.1.4 NestedClass元数据表 106

7.1.5 ClassLayout元数据表 107

7.2命名空间和类的完整名称 107

7.2.1 ILAsm命名约定 108

7.2.2命名空间 109

7.2.3类的完整名称 110

7.3类的特性 111

7.3.1标志 111

7.3.2类的可见性和友元程序集 113

7.3.3类的引用 113

7.3.4父类型 114

7.3.5接口实现 114

7.3.6类的布局信息 115

7.4接口 115

7.5值类型 117

7.5.1值的装箱和拆箱 117

7.5.2值类型的实例成员 118

7.5.3值类型的派生 118

7.6枚举 119

7.7委托 119

7.8嵌套类型 121

7.9类的扩充 123

7.10元数据有效性规则概要 125

7.10.1 TypeDef表有效性规则 125

7.10.2特定于枚举的有效性规则 126

7.10.3 TypeRef表有效性规则 126

7.10.4 InterfaceImpt表有效性规则 126

7.10.5 NestedClass表有效性规则 127

7.10.6 ClassLayout表有效性规则 127

第8章 基本类型和签名 128

8.1 CLR中的基本类型 128

8.1.1基本数据类型 128

8.1.2数据指针类型 129

8.1.3函数指针类型 131

8.1.4向量和数组 131

8.1.5修饰符 133

8.1.6本地类型 134

8.1.7可变类型 136

8.2签名中类的表示 138

8.3签名 139

8.3.1调用约定 139

8.3.2字段签名 139

8.3.3方法和属性签名 140

8.3.4 MemberRef签名 140

8.3.5间接调用签名 141

8.3.6局部变量签名 141

8.3.7类型说明 142

8.4签名有效性规则概要 143

第9章 字段和数据常量 144

9.1字段元数据 144

9.1.1定义字段 145

9.1.2引用字段 146

9.2实例字段和静态字段 147

9.3默认值 147

9.4映射字段 150

9.5数据常量声明 151

9.6显式布局和联合声明 152

9.7全局字段 155

9.8构造函数与数据常量 156

9.9元数据有效性规则概要 158

9.9.1 Field表有效性规则 159

9.9.2 FieldLayout表有效性规则 159

9.9.3 FieldRVA表有效性规则 159

9.9.4 FieldMarshal表有效性规则 160

9.9.5 Constant表有效性规则 160

9.9.6 MemberRef表有效性规则 160

第10章 方法 161

10.1方法元数据 161

10.1.1 Method表的记录字段 162

10.1.2方法标志 162

10.1.3方法名称 164

10.1.4方法实现标志 165

10.1.5方法参数 166

10.1.6引用方法 167

10.1.7方法实现元数据 168

10.2静态方法、实例方法和虚方法 168

10.3显式方法重写 172

10.4方法重写和可访问性 177

10.5方法头特性 178

10.6局部变量 180

10.7类的构造函数 181

10.7.1类的构造函数和beforefieldinit标志 182

10.7.2模块构造函数 184

10.8实例构造函数 184

10.9实例终结器 186

10.10可变参数列表 187

10.11方法重载 189

10.12全局方法 191

10.13元数据有效性规则概要 191

10.13.1 Method表有效性规则 192

10.13.2 Param表有效性规则 193

10.13.3 MethodImpl表有效性规则 193

第11章 泛型类型 195

11.1泛型类型元数据 196

11.1.1 GenericParam元数据表 198

11.1.2 GenericParamConstraint元数据表 198

11.1.3 TypeSpec元数据表 199

11.2约束标志 199

11.3在ILAsm中定义泛型类型 199

11.4类型参数寻址 200

11.5泛型类型实例化 201

11.6定义泛型类型:继承、实现、约束 202

11.7定义泛型类型:循环依赖 203

11.8泛型类型的成员 205

11.9嵌套泛型类型 210

11.10元数据有效性规则概要 213

第12章 泛型方法 214

12.1泛型方法元数据 214

12.2泛型方法签名 216

12.3在ILAsm中定义泛型方法 216

12.4调用泛型方法 217

12.5重写虚泛型方法 219

12.6元数据有效性规则概要 223

第四部分 深入执行引擎 226

第13章 IL指令 226

13.1长参数和短参数指令 227

13.2标号和流程控制指令 227

13.2.1无条件转移指令 228

13.2.2有条件转移指令 228

13.2.3比较转移指令 228

13.2.4 switch指令 230

13.2.5 break指令 230

13.2.6托管EH块退出指令 230

13.2.7托管EH块结束指令 231

13.2.8 ret指令 231

13.3运算指令 231

13.3.1栈处理 231

13.3.2常量加载 232

13.3.3间接加载 233

13.3.4间接存储 233

13.3.5算术操作 234

13.3.6溢出算术操作 235

13.3.7位操作 236

13.3.8移位操作 236

13.3.9转换操作 237

13.3.10溢出转换操作 238

13.3.11逻辑条件检查指令 238

13.3.12块操作 239

13.4寻址参数和局部变量 239

13.4.1方法参数加载 239

13.4.2方法参数地址加载 240

13.4.3方法参数存储 240

13.4.4方法参数列表 240

13.4.5局部变量加载 240

13.4.6局部变量引用加载 241

13.4.7局部变量存储 241

13.4.8局部块分配 241

13.4.9前缀指令 241

13.5寻址字段 242

13.6调用方法 243

13.6.1直接调用 243

13.6.2间接调用 244

13.6.3尾部调用 245

13.6.4带约束的虚调用 246

13.7寻址类和值类型 247

13.8向量指令 250

13.8.1向量创建 250

13.8.2元素地址加载 251

13.8.3元素加载 251

13.8.4元素存储 252

13.9代码可验证性 252

第14章 托管异常处理 255

14.1 EH子句的内部表示 255

14.2 EH子句的类型 256

14.3 EH子句声明的标号格式 258

14.4 EH子句声明的作用域格式 259

14.5处理异常 262

14.6异常类型 264

14.6.1加载程序异常 264

14.6.2 JIT编译器异常 264

14.6.3执行引擎异常 265

14.6.4互操作异常 266

14.6.5子类异常 266

14.6.6非托管异常映射 266

14.7 EH子句结构化规则概要 267

第五部分 特殊组件 270

第15章 事件和属性 270

15.1事件和委托 270

15.2事件元数据 273

15.2.1 Event表 273

15.2.2 EventMap表 274

15.2.3 MethodSemantics表 274

15.3事件声明 275

15.4属性元数据 277

15.4.1 Property表 278

15.4.2 PropertyMap表 279

15.5属性声明 279

15.6元数据有效性规则概要 280

15.6.1 Event表有效性规则 280

15.6.2 EventMap表有效性规则 281

15.6.3 Property表有效性规则 281

15.6.4 PropertyMap表有效性规则 281

15.6.5 MethodSemantics表有效性规则 281

第16章 自定义特性 283

16.1自定义特性的概念 283

16.2 CustornAttribute元数据表 284

16.3自定义特性的值编码 285

16.4自定义特性的逐字描述 287

16.5自定义特性声明 288

16.6自定义特性的分类 291

16.6.1执行引擎和JIT编译器 292

16.6.2互操作子系统 293

16.6.3安全 295

16.6.4 Remoting子系统 296

16.6.5 Visual Studio调试器 297

16.6.6程序集链接器 297

16.6.7公共语言规范(CLS)兼容性 298

16.6.8伪自定义特性 298

16.7元数据有效性规则概要 300

第17章 安全特性 301

17.1声明性安全 301

17.2声明性操作 302

17.3安全许可权限 303

17.3.1访问许可权限 303

17.3.2身份许可权限 306

17.3.3自定义许可权限 308

17.3.4许可权限集 309

17.4声明性安全元数据 310

17.5许可权限集的Blob编码 311

17.6安全特性声明 311

17.7元数据有效性规则概要 312

第18章 托管代码和非托管代码的互操作 314

18.1Thunk和包装器 315

18.1.1 P/Invoke Thunk 315

18.1.2实现映射元数据 317

18.1.3 IJW Thunk 317

18.1.4 COM可调用包装器 318

18.1.5运行时可调用包装器 319

18.2数据封送 320

18.2.1 blittable类型 320

18.2.2 in/out参数 321

18.2.3字符串封送 322

18.2.4对象封送 323

18.2.5更多对象封送 324

18.2.6数组封送 325

18.2.7委托封送 325

18.3为非托管代码提供托管方法作为回调 326

18.4作为非托管导出的托管方法 328

18.5小结 334

第19章 多语言工程 336

19.1 IL反汇编器 336

19.2双向解析的原则 340

19.3创造性的双向解析 341

19.4使用类的扩充 342

19.5通过双向解析进行模块链接 342

19.6 ASMMETA:解决循环依赖 344

19.7内嵌在高级语言中的IL 346

19.8在调试模式下编译 347

19.9小结 352

第六部分 附录 356

附录A ILAsm语法 356

附录B 元数据表 376

附录C IL指令集 387

附录D IL汇编器和IL反汇编器的命令行选项 394

附录E 离线验证工具 399

部分术语翻译说明 416