x64汇编语言:从新手到AVX专家

x64汇编语言:从新手到AVX专家"

作者:[比]乔·范·霍伊(JoVanHoey)著贾玉彬王昱波译
ISBN:9787302595465
定价:¥88
字数:千字
页数:
出版时间:2022.01.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

主要内容

.了解 CPU和内存的工作原理

.理解计算机和操作系统如何协同工作

.了解高级语言编译器如何生成机器语言,并使用这些知识编写更高效的代码

. 更好地分析程序中的错误

. 让程序正常工作,这一部分十分有趣

. 调查恶意软件并采取必要的行动加以预防

前言

█ █ █

前    言

学习汇编语言可能会令人沮丧,不仅仅是因为它是一种“无情”的语言。 在任何可能的情况下,计算机都会对你“发飙”。你可能只是在不知不觉中引入了一个隐藏的错误,该错误会在以后的程序中或执行时让你发狂。除此之外,学习曲线陡峭,语言晦涩难懂,英特尔官方文档铺天盖地,并且可用的开发工具各有其古怪之处。

在《x64汇编语言:从新手到AVX专家》中,你将从简单的程序开始学习,直到高级矢量扩展(AVX)编程。 到《x64汇编语言:从新手到AVX专家》结尾,你将能编写和阅读汇编代码,将汇编语言与更高级的语言混合在一起使用,并对AVX有初步的了解。《x64汇编语言:从新手到AVX专家》的目的是向你展示如何使用汇编语言指令。《x64汇编语言:从新手到AVX专家》不是关于编程风格或代码性能优化的。 在掌握汇编的基本知识之后,你可以继续学习如何优化代码。《x64汇编语言:从新手到AVX专家》不应该是你学习编程的第一本书。如果你没有任何编程经验,请将《x64汇编语言:从新手到AVX专家》搁置一段时间,先学习更高级语言(如C)的一些编程基础知识。

可扫描封底二维码下载《x64汇编语言:从新手到AVX专家》的所有源代码。《x64汇编语言:从新手到AVX专家》使用的代码都尽可能地简单,这意味着没有图形用户界面、繁杂的程序或错误检查,因为添加所有这些特性会使我们的注意力偏离学习汇编语言的目的。

理论知识被严格限制在最低限度:关于二进制数的一点知识、逻辑运算符的简短介绍以及一些有限的线性代数。我们将远离浮点转换。如果你需要转换二进制或十六进制数,请找一个可以为你执行此类操作的网站。不要浪费时间执行手工计算。坚持目标:学习汇编。

汇编代码以完整的程序呈现,这样你就可以在计算机上测试它们、操作它们、更改它们、破坏它们。

还将展示可以使用哪些工具、如何使用它们以及这些工具的潜在问题。拥有正确工具对于克服陡峭学习曲线至关重要。有时会指出可能有用或提供更多详细信息的书籍、白皮书和网站。

我们无意为你提供所有汇编指令的综合课程。 内容太多了,仅用一本书讲述是不可能的(请看英特尔手册的大小)。我们将介绍主要的指令,以便你对汇编语言有所了解。如果通读《x64汇编语言:从新手到AVX专家》,你将获得学习汇编的必要知识,你还可以自行详细研究某些感兴趣的领域。读完《x64汇编语言:从新手到AVX专家》后,你将可以进一步学习英特尔手册,并尝试理解其内容。

《x64汇编语言:从新手到AVX专家》的大部分内容专门针对Linux上的汇编,因为它是学习汇编语言的最简单平台。最后,我们提供了一些章节以帮助你了解如何在Windows上进行汇编。 你将看到,一旦掌握了Linux汇编,进行Windows汇编会更容易。

有许多可与英特尔处理器一起使用的汇编器,例如FASM、MASM、GAS、NASM和YASM。我们将在《x64汇编语言:从新手到AVX专家》中使用NASM,因为它是多平台的,在Linux、Windows和macOS上都可用,具有较大的用户群。但不必担心,一旦你熟悉一种汇编器,学习另一种汇编“方言”就很容易。

我们已经仔细编写并测试了《x64汇编语言:从新手到AVX专家》使用的代码。但是,如果文本中有错别字或程序中有错误,我们将不承担任何责任。我们将错误归咎于两只猫,它们喜欢在我们打字的时候走过我们的键盘。

我们在《x64汇编语言:从新手到AVX专家》中提出的想法和观点仅代表我们自己,并不代表IBM的立场、战略或观点。

目录

█ █ █

目    录

 

第1章  你的第一个程序   1

1.1  编辑、汇编、链接和运行(或调试)   2

1.2  汇编程序的结构   6

1.2.1  .data段   6

1.2.2  .bss段   7

1.2.3  .txt段   8

1.3  小结   10

第2章  二进制数、十六进制数和寄存器   11

2.1  二进制简短课程   11

2.1.1  整数   12

2.1.2  浮点数   13

2.2  寄存器简短课程   13

2.2.1  通用寄存器   14

2.2.2  指令指针寄存器(rip)   15

2.2.3  标志寄存器(Flag Register)   15

2.2.4  xmm和ymm寄存器   16

2.3  小结   16

第3章  用调试器进行程序分析:

GDB   17

3.1  开始调试   17

3.2  继续进步   22

3.3  其他GDB命令   24

3.4  稍加改进的hello, world程序   25

3.5  小结   27

第4章  你的下一个程序:

Alive and Kicking   29

4.1  alive程序分析   30

4.2  打印   34

4.3  小结   37

第5章  汇编是基于逻辑的   39

5.1  NOT   39

5.2  OR   39

5.3  XOR   40

5.4  AND   41

5.5  小结   42

第6章  数据显示调试器   43

6.1  使用DDD   43

6.2  小结   46

第7章  跳转和循环   47

7.1  安装SimpleASM   47

7.2  使用SASM   47

7.3  小结   54

第8章  内存   55

8.1  探索内存   55

8.2  小结   62

第9章  整数运算   63

9.1  从整数算术开始   63

9.2  分析算术指令   67

9.3  小结   69

第10章  堆栈   71

10.1  理解堆栈   71

10.2  跟踪堆栈   74

10.3  小结   76

第11章  浮点运算   77

11.1  单精度与双精度   77

11.2  浮点数编程   78

11.3  小结   81

第12章  函数   83

12.1  编写一个简单的函数   83

12.2  更多函数   85

12.3  小结   87

第13章  栈对齐和栈帧   89

13.1  栈对齐   89

13.2  有关栈帧的更多信息   91

13.3  小结   92

第14章  外部函数   93

14.1  编译并链接函数   93

14.2  扩展makefile   97

14.3  小结   98

第15章  调用约定   99

15.1  函数参数   100

15.2  栈布局   103

15.3  保留寄存器   106

15.4  小结   107

第16章  位运算   109

16.1  基础   109

16.2  算术   115

16.3  小结   119

第17章  位操作   121

17.1  修改位的其他方法   121

17.2  位标志变量   124

17.3  小结   125

第18章  宏   127

18.1  编写宏   127

18.2  使用objdump   129

18.3  小结   130

第19章  控制台I/O   131

19.1  使用I/O   131

19.2  处理溢出   133

19.3  小结   137

第20章  文件I/O   139

20.1  使用syscall   139

20.2  文件处理   140

20.3  条件汇编   149

20.4  文件操作指令   149

20.5  小结   151

第21章  命令行   153

21.1  访问命令行参数   153

21.2  调试命令行   154

21.3  小结   156

第22章  从C到汇编   157

22.1  编写C源文件   157

22.2  编写汇编代码   159

22.3  小结   164

第23章  内联汇编   165

23.1  基本内联汇编   165

23.2  扩展内联汇编   167

23.3  小结   170

第24章  字符串   171

24.1  移动字符串   171

24.2  比较和扫描字符串   176

24.3  小结   181

第25章  cpuid   183

25.1  使用cpuid   183

25.2  使用test指令   186

25.3  小结   188

第26章  SIMD   189

26.1  标量数据和打包数据   189

26.2  数据对齐与不对齐   191

26.3  小结   192

第27章  小心mxcsr   193

27.1  操作mxcsr的位   194

27.2  分析程序   201

27.3  小结   202

第28章  SSE对齐   203

28.1  未对齐示例   203

28.2  对齐示例   206

28.3  小结   210

第29章  SSE打包整数   211

29.1  适用于整数的SSE指令   211

29.2  分析代码   213

29.3  小结   214

第30章  SSE字符串操作   215

30.1  imm8控制字节   216

30.2  使用imm8控制字节   217

30.2.1  位0和1   217

30.2.2  位2和3   217

30.2.3  位4和5   218

30.2.4  位6   218

30.2.5  位7   219

30.2.6  标志   219

30.3  小结   220

第31章  搜索字符   221

31.1  确定字符串的长度   221

31.2  在字符串中搜索   224

31.3  小结   228

第32章  比较字符串   229

32.1  隐式长度   229

32.2  显式长度   232

32.3  小结   236

第33章  重排   237

33.1  重排初探   237

33.2  重排广播   243

33.3  重排反转   244

33.4  重排旋转   245

33.5  重排字节   245

33.6  小结   246

第34章  SSE字符串掩码   247

34.1  搜索字符   247

34.2  搜索某个范围内的字符   253

34.3  搜索子字符串   258

34.4  小结   262

第35章  AVX   263

35.1  测试是否支持AVX   263

35.2  AVX程序示例   265

35.3  小结   270

第36章  AVX矩阵运算   271

36.1  矩阵代码示例   271

36.2  矩阵打印:printm4x4   281

36.3  矩阵乘法:multi4x4   281

36.4  矩阵求逆:Inverse4x4   284

36.4.1  Cayley-Hamilton定理   284

36.4.2  Leverrier算法   285

36.4.3  代码   286

36.5  小结   289

第37章  矩阵转置   291

37.1  转置代码示例   291

37.2  解包版本   295

37.3  重排版本   299

37.4  小结   301

第38章  性能调优   303

38.1  转置计算性能   303

38.2  迹计算性能   310

38.3  小结   317

第39章  你好,Windows的世界   319

39.1  入门   319

39.2  编写一些代码   321

39.3  调试   323

39.4  syscall   323

39.5  小结   323

第40章  使用Windows API   325

40.1  控制台输出   325

40.2  编译Windows程序   328

40.3  小结   330

第41章  Windows中的函数   331

41.1  使用四个以上的参数   331

41.2  使用浮点数   337

41.3  小结   339

第42章  可变参数函数   341

42.1  Windows中的可变参数函数   341

42.2  混合值   343

42.3  小结   345

第43章  Windows文件   347

43.1  小结   350

后记   351

 

作者简介

编辑推荐

从简单和基本的程序开始,一直讲到 AVX 编程。 读完本书,你将能编写和阅读汇编代码、混合使用汇编语言和高级语言、了解什么是 AVX等。

本书代码力求简单,不涉及错误检查,没有图形用户界面,也没有多余的描述,以免分散你的注意力。理论知识也是浓缩的,只涉及少量二进制知识以及有限的逻辑运算符和线性代数知识,不涉及浮点转换方面的内容。

汇编代码都是完整程序,你可在自己的计算机上测试、使用、修改和删除这些代码。本书还将展示可使用哪些工具、如何使用它们以及这些工具的潜在问题。本书并未事无巨细地列出全部汇编指令,而是重点列出主要知识点。通读本书,你将扎实掌握基础知识,你可在此基础上更深入地研究自己感兴趣的主题。

Linux是学习汇编语言的最简单平台,因此本书大部分内容都是关于在 Linux 上进行汇编,但最后也提供了一些章节来帮助你在 Windows 上进行汇编。 一旦掌握了 Linux 汇编,就可更轻松地进行 Windows 汇编。

如果你没有任何编程经验,请暂时把本书放在一边,先学习高级语言(例如C语言)的一些编程基础知识。

作者寄语

Jo Van Hoey拥有40年的IT行业从业经验,包括各种职能部门、多家IT公司和各种计算平台。他最近从IBM大型机软件客户经理职位上退休。出于对IT安全的兴趣,Jo长期深入研究汇编语言,因为汇编语言知识是保护IT基础设施抵御攻击和恶意软件的重要基础。

电子资料

www.luweidong.cn

下一个