《汇编语言基础及驱动程序开发》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:戴水贵,敖志刚,俞海英等编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2012
  • ISBN:9787302266495
  • 页数:320 页
图书介绍:本书讲解汇编语言的基础知识,并详细介绍了用汇编语言开发驱动程序的方法。

第1章 Windows汇编语言基础知识 1

1.1 如何学习Windows汇编语言 1

1.2 Windows汇编语言与DOS汇编语言的区别 1

1.3 二进制数 2

1.3.1 将十进制数转为二进制、八进制和十六进制数 2

1.3.2 计算机内存中的数是以二进制表示的 4

1.3.3 计算机容量的一些计量单位 5

1.3.4 无符号数的表示范围 5

1.3.5 有符号数的表示范围 6

1.3.6 补码 7

1.3.7 数据的二进制存储 8

1.4 汇编语言的基本元素 9

1.4.1 整数常量 9

1.4.2 算术运算符及其优先级 10

1.4.3 实数常量 10

1.4.4 字符常量和字符串常量 10

1.4.5 标识符 11

1.4.6 伪指令 12

1.4.7 指令和标号 12

1.4.8 MASM中的@@标号 12

1.4.9 注释 13

1.4.10 .model语句 13

1.4.11 用.386指明使用的指令集 14

1.4.12 节区的定义 14

1.4.13 invoke伪指令 15

1.4.14 续行号 16

1.4.15 wsprintf格式化信息串函数和其他输入/输出函数 16

1.4.16 第一个输入/输出程序实例 18

1.4.17 创建编译连接环境 19

1.4.18 编译连接和运行 20

1.4.19 建立编译连接批命令文件 20

1.4.20 全局变量的定义和初始值 20

1.4.21 局部变量 23

1.4.22 可在程序代码中插入数据 23

1.4.23 等号伪指令 23

1.4.24 EQU伪指令 24

1.4.25 当前地址运算符$ 26

1.4.26 OFFSET、ADDR操作符和LEA指令 26

1.4.27 ALIGN和EVEN伪指令 27

1.4.28 PTR操作符 27

1.4.29 TYPE操作符 28

1.4.30 LENGTHOF操作符 29

1.4.31 SIZEOF或SIZE操作符 30

1.4.32 LABEL伪指令 30

1.4.33 TYPEDEF和TYPEDEF PTR操作符 31

1.4.34 基数控制伪指令RADIX 34

1.4.35 ORG伪指令 34

1.4.36 REPT伪指令 34

1.4.37 ASSUME伪指令 36

1.4.38 SHORT伪指令 36

1.4.39 在汇编语言中调用C语言内部函数 36

1.4.40 在C语言中嵌入汇编语言 37

1.4.41 在C语言程序中调用汇编语言子程序 38

1.4.42 在C语言程序中使用汇编语言程序中的变量 40

1.4.43 在汇编语言程序中使用C语言程序中的变量 40

1.4.44 在C++程序中调用汇编语言程序中的变量和子程序 41

1.5 高级语法 43

1.5.1 while-endw语句 43

1.5.2 条件运算符 44

1.5.3 repeat-until语句 46

1.5.4 if-elseif-endif语句 47

1.5.5 continue语句 48

1.5.6 break if语句 50

1.6 结构体 51

1.6.1 结构体的定义 51

1.6.2 定义结构体变量并初始化 52

1.6.3 结构体成员名的使用方法 52

1.6.4 结构体的嵌套定义和使用 54

1.6.5 用EQU定义结构体变量 55

1.6.6 结构体定义例 56

1.7 共用体 58

1.7.1 共用体的定义和使用 58

1.7.2 共用体的嵌套定义 62

1.7.3 共用体和结构体的交叉定义 63

1.7.4 位结构RECORD和位屏蔽MASK 64

1.8 宏 66

1.8.1 宏的定义及使用方法 66

1.8.2 入口参数的赋值符“:=”和宏的默认值 70

1.8.3 REQ伪指令 71

1.8.4 EXITM、ECHO伪指令和%运算符 71

1.8.5 %@Line和@FileCur汇编操作符 73

1.8.6 <>运算符 74

1.8.7 入口参数类型VARARG 75

1.8.8 判操作数属性伪指令OPATTR 75

1.8.9 @SizeStr()返回串大小 78

1.8.10 @SubStr()从串中取子串 79

1.8.11 SUBSTR从串中取子串 80

1.8.12 替换操作符& 80

1.8.13 TEXTEQU伪指令 81

1.8.14 条件汇编伪指令 82

1.8.15 FOR-ENDM宏指令 87

1.8.16 FORC-ENDM宏指令 88

1.9 过程 89

1.9.1 无参过程的定义 89

1.9.2 无参过程的调用方法 89

1.9.3 有参过程的定义 90

1.9.4 有参过程的调用方法 90

1.9.5 过程中的USES参数 91

1.9.6 过程中的语言类型 92

1.9.7 用PROTO声明过程 92

1.9.8 过程中的值传递和地址传递 92

1.9.9 用堆栈传递参数 95

1.9.10 缓冲区溢出攻击原理 97

1.9.11 程序举例 99

1.10 用IDA将过程反汇编 110

1.10.1 ENTER和LEAVE指令 110

1.10.2 RET和RETN指令的区别 112

1.10.3 不同类型过程的反汇编 113

1.10.4 过程反汇编规律总结 119

1.10.5 过程反汇编后的修改方法 119

1.10.6 一个完整程序的反汇编 120

1.10.7 option参数 126

1.11 常用数值转换库函数 128

1.12 库函数应用程序举例 128

1.13 宏应用程序例 133

1.13.1 宏$CTA0程序例 133

1.13.2 宏$CT0程序例 134

习题 135

第2章 寄存器和字符串操作指令 139

2.1 80386以上CPU处理器的寄存器 139

2.1.1 32位通用寄存器 139

2.1.2 16位段寄存器 140

2.1.3 32位标志寄存器 140

2.1.4 算术运算影响的标志 142

2.1.5 有符号数和无符号数各有一套转移指令 145

2.1.6 转移指令列表 146

2.1.7 32位程序指针寄存器 147

2.1.8 32位控制寄存器 147

2.1.9 系统地址寄存器 148

2.2 字符串操作指令 148

2.2.1 REP MOVSB的使用方法(递增复制) 149

2.2.2 REP MOVSB的使用方法(递减复制) 151

2.2.3 REP STOSB的使用方法 152

2.2.4 LODSB和STOSB的配合使用 153

2.2.5 SCASB的使用方法 153

2.2.6 CMPSB的使用方法 156

2.2.7 LOOPNZ的使用方法 158

习题 161

第3章 指令详解 163

3.1 普通指令 163

3.2 移位指令 186

3.3 转移指令 191

3.4 特权指令 191

第4章 实模式和保护模式内存管理 197

4.1 地址线的根数和寻址范围的关系 197

4.2 实地址模式下的逻辑地址 199

4.3 保护模式 200

4.3.1 保护模式下内存寻址示意图 200

4.3.2 非系统段描述符的格式和含义 201

4.3.3 系统段描述符的格式和含义 203

4.3.4 定义段描述符结构体 204

4.3.5 段描述符结构体使用例 205

4.3.6 描述符表寄存器 206

4.3.7 门描述符 207

4.3.8 中断描述符表 209

4.3.9 分页管理与映射 210

习题 213

第5章 Windows设备驱动程序基础 215

5.1 何为Windows设备驱动程序 215

5.2 从一个最简单的设备驱动程序开始 216

5.2.1 一个最简单的设备驱动程序 217

5.2.2 注册和运行 219

5.3 UNICODE_STRING串结构体 220

5.3.1 双字节字符串的定义方法 220

5.3.2 UNICODE_STRING串结构体的使用方法 221

5.3.3 用宏$CCOUNTED_UNICODE_STRING定义串 221

5.3.4 用sprintf格式化信息串 222

5.3.5 将ASCIIZ串转为UNICODE_STRING串 224

5.3.6 RtlUnicodeStringToAnsiString函数 227

5.3.7 将一个简单的程序反汇编 228

5.3.8 用RtlInitUnicodeString和宏unicode生成UNICODE_STRING串 230

5.3.9 设备名和符号连接名的命名格式 233

5.3.10 创建设备名和符号连接名程序实例 233

5.4 Windows设备控制字 234

5.4.1 用宏CTL_CODE构造设备控制字 236

5.4.2 用宏从设备控制字中取出某个字段 237

5.5 用户程序和驱动程序之间的调用关系一 239

5.5.1 将使喇叭发声的代码放在DriverEntry中的驱动程序 239

5.5.2 用CreateService和StartService注册和运行驱动程序 241

5.6 用户程序和驱动程序之间的调用关系二 244

5.6.1 将读写I/O端口的驱动程序的地址置入MajorFunction数组 244

5.6.2 用户程序用DeviceIoControl和驱动程序通信 251

5.6.3 用.inf文件安装驱动程序 254

第6章 内核模式下的文件管理 257

6.1 创建和删除文件夹 257

6.2 创建文件和打开文件写 259

6.3 打开文件读和删除文件 261

6.4 将数据添加到文件尾 264

6.5 修改文件属性 265

第7章 直接访问硬盘 269

7.1 用系统提供的驱动程序访问硬盘 269

7.2 如何获取硬盘参数 276

7.3 用in和out指令直接读/写硬盘扇区 280

7.3.1 硬盘端口寄存器功能列表 280

7.3.2 任务状态段TSS中的I/O许可位图 284

7.3.3 一个修改I/O许可位图的驱动程序 285

7.3.4 一个直接读取硬盘扇区的服务控制程序 288

7.3.5 用in/out指令获取硬盘序列号等参数 299

7.4 在PCI配置空间中找出PCI-IDE控制器的配置空间 300

附录A 键盘扫描码 311

附录B ASCII码表 313

附录C 习题答案 315