《虚拟机的设计与实现 C/C++》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)Bill Blunden著;杨涛等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2003
  • ISBN:7111111117
  • 页数:676 页
图书介绍:《虚拟机的设计与实现:CC++》内容简介描述了如何通过一系简单的步骤实现一个具有实用价值的运行时系统。对以下技术进行了深入的讨论:内存管理技术、TCP/IP连网技术,虚拟机与宿主代码的接口技术。总而言之,能在一个商业化运行时系统里找到的技术都在HEC虚拟机系统里有所体现。

第一部分 概 述 1

第1章 历史与目标 1

1.1 历史回顾 1

1.2 为什么要设计虚拟机 7

1.3 贬值的财富 8

1.4 微妙的平衡 9

1.5 虚拟机反对派的观点 12

1.6 展望未来 12

1.7 经验和教训 13

1.8 参考资料 16

2.2 记号方法 18

2.1 概述 18

第2章 基本执行环境 18

2.3 运行时系统与虚拟机 19

2.4 内存管理 20

2.4.1 机器级上的内存管理 21

2.4.2 操作系统级上的内存管理 25

2.4.3 应用程序级上的内存管理 28

2.5 动态内存管理 32

2.6 HEC虚拟机的内存管理 38

2.7 机器设计 41

2.8 HEC虚拟机的设计 43

2.9 任务管理 44

2.10 线程 48

2.11 HEC虚拟机的任务管理 50

2.12 输入/输出 51

2.13 HEC虚拟机的输入/输出 53

2.14 参考资料 54

第二部分 HEC虚拟机 57

第3章 虚拟机的实现 57

3.1 概述 57

3.2 全局性元素 58

3.2.1 common.c 60

3.2.2 win32.c 61

3.2.3 iset.c 69

3.2.4 exenv.c 73

3.2.5 error.c 78

3.3 HEC虚拟机的命令行语法 83

3.4 用来实现调试功能的代码 84

3.5 处理配置选项 85

3.6 设置环境 92

3.7 字节码验证 98

3.8 指令的执行 116

3.8.1 load.c 122

3.8.2 store.c 127

3.8.3 pushpop.c 129

3.8.4 move.c 132

3.8.5 jump.c 133

3.8.6 bitwise.c 135

3.8.7 shift.c 137

3.8.8 intmath.c 138

3.8.9 fltmath.c 139

3.8.10 dblmath.c 140

3.8.11 interupt.c 141

3.8.12 intwin32.c 143

3.9 本章总结 143

3.10 参考资料 144

第4章 HEC调试器 146

4.1 概述 146

4.2 调试技术 147

4.2.1 断点 147

4.2.2 单步执行 147

4.4 Intel平台上的中断 148

4.3 Intel平台上的调试技术 148

4.4.1 实模式下的内存寻址 149

4.4.2 实模式下的寄存器 150

4.4.3 实模式下的中断处理 151

4.5 DOSdbg 152

4.6 用来对付调试器的招数 162

4.6.1 招数之一:破坏堆栈 162

4.6.2 招数之二:增加线程 163

4.6.3 招数之三:自修改程序 164

4.6.4 招数之四:混合内存模型 166

4.6.5 其他招数 167

4.7 HEC文件格式 168

4.7.2 符号表 169

4.7.1 文件头部分 169

4.7.3 字符串表 171

4.7.4 字节码部分 171

4.8 操作模式 171

4.9 HEC调试器实现 172

4.10 命令行的处理 173

4.11 保存调试元数据 173

4.12 处理调试命令 186

4.12.1 ?-帮助 187

4.12.2 Q-退出 188

4.12.3 F-可执行文件信息 188

4.12.4 D start stop-转储内存 189

4.12.5 S start stop string-搜索字符串 191

4.12.6 L string-符号查询 193

4.12.7 P-函数显示 197

4.12.8 RX-显示寄存器内容(Ri、Rf、Rd) 198

4.12.9 T-单步执行 199

4.13 未来设想 212

4.13.1 更快的算法 212

4.13.2 O(n)记号 213

4.13.3 动态补丁 214

4.13.4 动态断点 214

4.13.5 会话日志 215

4.13.6 程序频率计数 215

4.13.7 符号化调试器 215

4.14 试用HEC虚拟机 216

4.15 参考资料 223

第三部分 HEC汇编语言 225

第5章 汇编器的实现 225

5.1 概述 225

5.2 数据结构简述 227

5.2.1 HSAM汇编器算法 227

5.2.2 抽象数据类型 228

5.2.3 抽象数据类型之一:向量 229

5.2.4 可扩展数组 230

5.2.5 抽象数据类型之二:数据树 233

5.2.6 二元搜索树 234

5.2.7 抽象数据类型之三:字典 242

5.2.8 哈希表 243

5.2.9 HASM数据结构小结 251

5.3 命令行的使用方法 252

5.4 HEC汇编器实现 253

5.5 全局性元素 258

5.6 命令行选项和命令行参数的处理 260

5.7 第1遍——建立符号表 267

5.7.1 概述 267

5.7.2 LineScanner类 268

5.7.3 LineTokenizer类 274

5.7.4 Passl类 298

5.7.5 StringTable类 317

5.7.6 SymbolTable类 320

5.7.7 HashTable类 332

5.8 第2遍——生成字节码和程序清单 338

5.9 创建编译单位 385

5.10 读取程序清单文件 392

5.11 试用HSAM汇编语言 393

5.12 参考资料 405

第6章 虚拟机的中断 407

6.1 概述 407

6.2 INT 0——文件输入/输出 415

6.3 INT 1——文件管理 428

6.4 INT 2——进程管理 444

6.5 INT 3——断点 452

6.6 INT 4——时间和日期调用 452

6.7 INT 5——处理命令行参数 462

6.8 INT 6——内存诊断 465

6.9 INT 7——动态内存分配 469

6.10 INT 8——数学函数 480

6.11 INT 9——与宿主代码的接口 486

6.12 INT 10——进程间通信(IPC) 498

6.12.1 IPC概述 498

6.12.2 TCP/IP套接字 503

6.12.3 TCP/IP地址 504

6.12.4 实现 506

6.13 参考资料 525

第7章 HEC汇编语言 527

7.1 构成汇编语言程序的元素 527

7.1.1 指令 527

7.1.3 注释 529

7.1.2 伪指令 529

7.2 函数和标号的定义 530

7.3 立即数据的加载和移动 533

7.4 直接内存寻址模式 534

7.5 数据的加载和保存 538

7.6 算术运算 541

7.7 二进制位操作 542

7.8 数据转换 547

7.9 程序流控制 549

7.9.1 跳转 549

7.9.2 选择 552

7.9.3 循环 557

7.10 与堆栈有关的操作 559

7.11 间接内存寻址模式 562

7.12 全局变量存储的定义 563

7.13 构造函数调用记录 567

7.14 数据类型的映射 575

7.15 程序元素的作用范围 579

7.16 指令与伪指令小结 587

7.17 参考资料 590

第8章 高级论题 592

8.1 HEC虚拟机与高级语言:编译器设计 592

8.1.1 复杂性管理 592

8.1.2 方法 595

8.2.1 基本概念 598

8.2 支持面向对象功能 598

8.2.2 封装 600

8.2.3 继承 605

8.2.4 多态 612

8.3 异常 623

8.3.1 Java中的异常 625

8.3.2 异常的实现方法 629

8.3.3 异常的实现示例 631

8.3.4 异常的滥用 641

8.4 移植 641

8.4.1 对Linux的观感 641

8.4.2 linux.c文件 645

8.4.3 intlinux.c文件 654

8.5 建立HEC运行时系统 663

8.6 建造你自己的运行时系统 665

8.6.1 模仿与创造 665

8.6.2 项目管理——关键路径 665

8.6.3 运行时系统的关键路径 666

8.6.4 操作系统的关键路径 667

8.7 参考资料 671

8.7.1 编译器理论 671

8.7.2 密码学 671

8.7.3 异常 672

8.7.4 Java 672

8.7.5 Linux 673

附录 674