x86/x64体系探索及编程

x86/x64体系探索及编程
作 者: 邓志
出版社: 电子工业出版社
丛编项:
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: 计算机理论
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  邓志,1977年生于广东,在银行工作十余年,现自由职业者。对计算机有一股热情和蛮劲,善于思考,特别喜欢琢磨底层架构。熟悉C语言,并且精通x86/x64平台的汇编语言与机器指令系统,能用汇编写简易的OS核心。

内容简介

《x86/x64体系探索及编程》是对Intel手册所述处理器架构的探索和论证。全书分五大部分,对多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。通过阅读本书,读者应能培养自己动手实验的能力。如果再有一些OS方面的相关知识,基本上就可以写出自己简易的OS核心。

图书目录

第一篇

x86基础第1章

数与数据类型

21.1.1

数字

21.1.2

二进制数

31.1.3

二进制数的排列

31.1.4

十六进制数

51.1.5

八进制数与十进制数

数据类型

61.2.1

integer数

61.2.2

floating-point数

91.2.3

real

number(实数)与NaN(not

anumber)

111.2.4

unsupported编码值

141.2.5

浮点数精度的转换

151.2.6

浮点数的溢出

171.2.7

BCD码

201.2.8

SIMD数据

21第2章

x86/x64编程基础

选择编译器

机器语言

Hello

world

252.3.1

使用寄存器传递参数

262.3.2

调用过程

272.3.3

定义变量

16位编程、32位编程,以及64位编程

282.4.1

通用寄存器

282.4.2

操作数大小

302.4.3

64位模式下的内存地址

302.4.4

内存寻址模式

312.4.5

内存寻址范围

342.4.6

使用的指令限制

编程基础

342.5.1

操作数寻址

352.5.2

传送数据指令

392.5.3

位操作指令

452.5.4

算术指令

472.5.5

CALL与RET指令

482.5.6

跳转指令

编辑与编译、运行

48第3章

编写本书的实验例子

实验的运行环境

生成空白的映像文件

523.2.1

使用nasm编译器生成

523.2.2

使用bximage工具

设置bochs配置文件

源代码的基本结构

编译源代码

映像文件内的组织

使用merge工具

563.7.1

merge的配置文件

573.7.2

执行merge命令

使用U盘启动真实机器

583.8.1

使用merge工具写U盘

583.8.2

使用hex编辑软件写U盘

编写boot代码

603.9.1

LBA转换为CHS

623.9.2

测试是否支持int13h扩展功能

633.9.3

使用int13h扩展读磁盘

643.9.4

最后看看load_module()

总结

66第4章

处理器的身份

测试是否支持CPUID指令674.2

CPUID指令的术语及表达

基本信息与扩展信息

处理器的型号(family,model与stepping)

最大的物理地址和线性地址

处理器扩展状态信息

744.6.1

探测Processor

ExtendedState子叶

754.6.2

Processor

ExtendedState子叶所需内存size

764.6.3

Processor

ExtendedState的保存

774.6.4

Processor

ExtendedState的恢复

处理器的特性

处理器的Cache与TLB信息

MONITOR/MWAIT信息

处理器的longmode

84第5章

了解Flags

Eflags中的状态标志位

865.1.1

signed数的运算

865.1.2

unsigned数的运算

IOPL标志位

TF标志与RF标志

NT标志

AC标志

VM标志

eflags寄存器的其他事项

99第6章

处理器的控制寄存器

CR8

CR3

CR0

1046.3.1

保护模式位PE

1046.3.2

x87

FPU单元的执行环境

1046.3.3

CR0.PG控制位

1086.3.4

CR0.CD与CR0.NW控制位

1086.3.5

CR0.WP控制位

1106.3.6

CR0.AM控制位

CR4

1106.4.1

CR4.TSD与CR4.PCE控制位

1106.4.2

CR4.DE与CR4.MCD控制位

1116.4.3

CR4.OSFXSR控制位

1116.4.4

CR4.VMXE与CR4.SMXE控制位

1116.4.5

CR4.PCIDE与CR4.SMEP控制位

1126.4.6

CR4.OSXSAVE控制位

1136.4.7

CR4中关于页的控制位

EFER扩展功能寄存器

114第7章

MSR

MSR的使用

MTRR

1177.2.1

Fixed-range区域的映射

1187.2.2

MTRR的功能寄存器

MSR中对特殊指令的支持

1247.3.1

支持sysenter/sysexit指令的MSR

1257.3.2

支持syscall/sysret指令的MSR

1267.3.3

支持swapgs指令的MSR

1277.3.4

支持monitor/mwait指令的MSR

提供processorfeature管理

其他未列出来的MSR

关于MSR一些后续说明

129第二篇

处理器的工作模式第8章

实地址模式

真实的地址

real

mode的编址

real

mode的状态

段基址的计算

第1条执行的指令

实模式下的执行环境

实模式下的IVT

突破64K段限

A20地址线

137第9章

SMM系统管理模式探索

进入SMM

SMM的运行环境

1419.2.1

SMRAM区域

1419.2.2

SMM执行环境的初始化

1439.2.3

SMM下的operand与address

1449.2.4

SMM下的CS与EIP

1449.2.5

SMM下的SS与ESP

SMM里的中断

SMI的Back-to-Back响应

SMM里开启保护模式

SMM的版本

I/O指令的重启及Halt重启

SMM的退出

SMBASE的重定位

SMI处理程序的初始化

SMM的安全

1569.11.1

芯片组的控制

1569.11.2

处理器对SMRAM空间的限制

1589.11.3

cache的限制

测试SMI处理程序

161第10章

x86/x64保护模式体系(上)

x86/x64的权限

保护模式下的环境

16410.2.1

段式管理所使用的资源

16510.2.2

paging分页机制所使用的资源

物理地址的产生

段式管理机制

16710.4.1

段式内存管理

16810.4.2

段式的保护措施

段式管理的数据结构

16910.5.1

SegmentSelector(段选择子)

16910.5.2

DescriptorTable(描述符表)

17210.5.3

Segment

SelectorRegister(段寄存器)

17410.5.4

SegmentDescriptor(段描述符)

17510.5.5

LDT描述符与LDT

开启保护模式

26010.6.1

初始化GDT

26010.6.2

初始化IDT

26210.6.3

切换到保护模式

263第11章

x86/x64保护模式体系(下)

物理页面

26511.1.1

处理器的最高物理地址(MAXPHYADDR)

26611.1.2

物理页面的大小

26711.1.3

页转换模式(PagingMode)

paging机制下使用的资源

27011.2.1

寄存器

27011.2.2

CPUID查询leaf

27011.2.3

寄存器的控制位

27111.2.4

页转换表资源

32位paging模式(non-PAE模式)

27311.3.1

CR3结构

27411.3.2

32位paging模式下的PDE结构

27511.3.3

使用32位paging

PAE

paging模式

28211.4.1

在Intel64下的CR3与PDPTE寄存器

28311.4.2

在AMD64下的CR3

28511.4.3

PAE

paging模式里的PDPTE结构

28611.4.4

PAE

paging模式里的PDE结构

28611.4.5

PAE

paging模式里的PTE结构

28811.4.6

使用和测试PAEpaging模式

28811.4.7

使用和测试ExecutionDisable功能

IA-32e

paging模式

29711.5.1

IA-32e

paging模式下的CR3

29911.5.2

IA-32e

paging模式下的PML4E结构

30211.5.3

IA-32e

paging模式下的PDPTE结构

30211.5.4

IA-32e

paging模式下的PDE结构

30311.5.5

IA-32e

paging模式下的PTE