图书介绍

逆向工程 权威指南 上2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

逆向工程 权威指南 上
  • Dennis Yurichev 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:7115434456
  • 出版时间:2017
  • 标注页数:484页
  • 文件大小:100MB
  • 文件页数:503页
  • 主题词:

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

逆向工程 权威指南 上PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一部分 指令讲解3

第1章 CPU简介3

1.1 指令集架构3

第2章 最简函数5

2.1 x865

2.2 ARM5

2.3 MIPS5

MIPS指令集与寄存器名称6

第3章 Hello,world!7

3.1 x867

3.1.1 MSVC7

3.1.2 GCC9

3.1.3 GCC:AT&T语体9

3.2 x86-6411

3.2.1 MSVC-x86-6411

3.2.2 GCC-x86-6412

3.3 GCC的其他特性12

3.4 ARM13

3.4.1 Keil 6/2013——未启用优化功能的ARM模式14

3.4.2 Thumb模式下、未开启优化选项的Keil15

3.4.3 ARM模式下、开启优化选项的Xcode15

3.4.4 Thumb-2模式下、开启优化选项的Xcode(LLVM)16

3.4.5 ARM6418

3.5 MIPS19

3.5.1 全局指针Global pointer19

3.5.2 Optimizing GCC19

3.5.3 Non-optimizing GCC21

3.5.4 栈帧23

3.5.5 Optimizing GCC:GDB的分析方法23

3.6 总结24

3.7 练习题24

3.7.1 题目124

3.7.2 题目224

第4章 函数序言和函数尾声25

递归调用25

第5章 栈26

5.1 为什么栈会逆增长26

5.2 栈的用途27

5.2.1 保存函数结束时的返回地址27

5.2.2 参数传递28

5.2.3 存储局部变量29

5.2.4 x86:alloca()函数29

5.2.5(Windows)SEH结构化异常处理31

5.2.6 缓冲区溢出保护31

5.3 典型的栈的内存存储格式31

5.4 栈的噪音31

5.5 练习题34

5.5.1 题目134

5.5.2 题目234

第6章 printf()函数与参数调用36

6.1 x8636

6.1.1 x86:传递3个参数36

6.1.2 x64:传递9个参数41

6.2 ARM44

6.2.1 ARM模式下传递3个参数44

6.2.2 ARM模式下传递8个参数46

6.3 MIPS50

6.3.1 传递3个参数50

6.3.2 传递9个参数52

6.4 总结56

6.5 其他57

第7章 scanf()58

7.1 演示案例58

7.1.1 指针简介58

7.1.2 x8658

7.1.3 MSVC+OllyDbg60

7.1.4 x6462

7.1.5 ARM63

7.1.6 MIPS64

7.2 全局变量65

7.2.1 MSVC:x8666

7.2.2 MSVC:x86+OllyDbg67

7.2.3 GCC:x8668

7.2.4 MSVC:x6468

7.2.5 ARM:Optimizing Keil 6/2013(Thumb模式)69

7.2.6 ARM6470

7.2.7 MIPS70

7.3 scanf()函数的状态监测74

7.3.1 MSVC:x8674

7.3.2 MSVC:x86:IDA75

7.3.3 MSVC:x86+OllyDbg77

7.3.4 MSVC:x86+Hiew78

7.3.5 MSVC:x6479

7.3.6 ARM80

7.3.7 MIPS81

7.3.8 练习题82

7.4 练习题82

题目182

第8章 参数获取83

8.1 x8683

8.1.1 MSVC83

8.1.2 MSVC+OllyDbg84

8.1.3 GCC84

8.2 x6485

8.2.1 MSVC85

8.2.2 GCC86

8.2.3 GCC:uint64_t型参数87

8.3 ARM88

8.3.1 Non-optimizing Keil 6/2013(ARM mode)88

8.3.2 Optimizing Keil 6/2013(ARM mode)89

8.3.3 Optimizing Keil 6/2013(Thumb mode)89

8.3.4 ARM6489

8.4 MIPS91

第9章 返回值93

9.1 void型函数的返回值93

9.2 函数返回值不被调用的情况94

9.3 返回值为结构体型数据94

第10章 指针96

10.1 全局变量96

10.2 局部变量98

10.3 总结100

第11章 GOTO语句101

11.1 无用代码Dead Code102

11.2 练习题102

第12章 条件转移指令103

12.1 数值比较103

12.1.1 x86103

12.1.2 ARM109

12.1.3 MIPS112

12.2 计算绝对值115

12.2.1 Optimizing MSVC115

12.2.2 Optimizing Keil 6/2013:Thumb mode116

12.2.3 Optimizing Keil 6/2013:ARM mode116

12.2.4 Non-optimizng GCC 4.9(ARM64)116

12.2.5 MIPS117

12.2.6 不使用转移指令117

12.3 条件运算符117

12.3.1 x86117

12.3.2 ARM118

12.3.3 ARM64119

12.3.4 MIPS119

12.3.5 使用if/else替代条件运算符120

12.3.6 总结120

12.4 比较最大值和最小值120

12.4.1 32位120

12.4.2 64位123

12.4.3 MIPS125

12.5 总结125

12.5.1 x86125

12.5.2 ARM125

12.5.3 MIPS126

12.5.4 无分支指令(非条件指令)126

12.6 练习题127

第13章 switch()/case/default128

13.1 case陈述式较少的情况128

13.1.1 x86128

13.1.2 ARM:Optimizing Keil 6/2013(ARM mode)133

13.1.3 ARM:Optimizing Keil 6/2013(Thumb mode)133

13.1.4 ARM64:Non-optimizing GCC(Linaro)4.9134

13.1.5 ARM64:Optimizing GCC(Linaro)4.9134

13.1.6 MIPS135

13.1.7 总结136

13.2 case陈述式较多的情况136

13.2.1 x86136

13.2.2 ARM:Optimizing Keil 6/2013(ARM mode)140

13.2.3 ARM:Optimizing Keil 6/2013(Thumb mode)141

13.2.4 MIPS143

13.2.5 总结144

13.3 case从句多对一的情况145

13.3.1 MSVC145

13.3.2 GCC147

13.3.3 ARM64:Optimizing GCC 4.9.1147

13.4 Fall-through149

13.4.1 MSVC x86149

13.4.2 ARM64150

13.5 练习题151

13.5.1 题目1151

第14章 循环152

14.1 举例说明152

14.1.1 x86152

14.1.2 x86:OllyDbg155

14.1.3 x86:跟踪调试工具tracer156

14.1.4 ARM157

14.1.5 MIPS160

14.1.6 其他161

14.2 内存块复制161

14.2.1 编译结果161

14.2.2 编译为ARM模式的程序162

14.2.3 MIPS163

14.2.4 矢量化技术164

14.3 总结164

14.4 练习题165

14.4.1 题目1165

14.4.2 题目2165

14.4.3 题目3166

14.4.4 题目4167

第15章 C语言字符串的函数170

15.1 strlen()170

15.1.1 x86170

15.1.2 ARM174

15.1.3 MIPS177

15.2 练习题178

15.2.1 题目1178

第16章 数学计算指令的替换181

16.1 乘法181

16.1.1 替换为加法运算181

16.1.2 替换为位移运算181

16.1.3 替换为位移、加减法的混合运算182

16.2 除法运算186

16.2.1 替换为位移运算186

16.3 练习题186

16.3.1 题目1186

第17章 FPU188

17.1 IEEE 754188

17.2 x86188

17.3 ARM、MIPD、x86/x64 SIMD188

17.4 C/C++188

17.5 举例说明189

17.5.1 x86189

17.5.2 ARM:Optimizing Xcode 4.6.3(LLVM)(ARM mode)193

17.5.3 ARM:Optimizing Keil 6/2013(Thumb mode)193

17.5.4 ARM64:Optimizing GCC(Linaro)4.9194

17.5.5 ARM64:Non-optimizing GCC(Linaro)4.9195

17.5.6 MIPS195

17.6 利用参数传递浮点型数据196

17.6.1 x86196

17.6.2 ARM+Non-optimizing Xcode 4.6.3(LLVM)(Thumb-2 mode)197

17.6.3 ARM+Non-optimizing Keil 6/2013(ARM mode)198

17.6.4 ARM64+Optimizing GCC(Linaro)4.9198

17.6.5 MIPS199

17.7 比较说明200

17.7.1 x86200

17.7.2 ARM216

17.7.3 ARM64219

17.7.4 MIPS220

17.8 栈、计算器及逆波兰表示法221

17.9 x64221

17.10 练习题221

17.10.1 题目1221

17.10.2 题目2221

第18章 数组223

18.1 简介223

18.1.1 x86223

18.1.2 ARM225

18.1.3 MIPS228

18.2 缓冲区溢出229

18.2.1 读取数组边界以外的内容229

18.2.2 向数组边界之外的地址赋值231

18.3 缓冲区溢出的保护方法234

18.3.1 Optimizing Xcode 4.6.3(LLVM)(Thumb-2 mode)236

18.4 其他238

18.5 字符串指针238

18.5.1 x64239

18.5.2 32位MSVC239

18.5.3 32位ARM240

18.5.4 ARM64241

18.5.5 MIPS242

18.5.6 数组溢出242

18.6 多维数组245

18.6.1 二维数组举例246

18.6.2 以一维数组的方式访问二维数组247

18.6.3 三维数组248

18.6.4 更多案例251

18.7 二维字符串数组的封装格式251

18.7.1 32位ARM253

18.7.2 ARM64254

18.7.3 MIPS254

18.7.4 总结255

18.8 本章小结255

18.9 练习题255

18.9.1 题目1255

18.9.2 题目2258

18.9.3 题目3263

18.9.4 题目4264

18.9.5 题目5265

第19章 位操作270

19.1 特定位270

19.1.1 x86270

19.1.2 ARM272

19.2 设置/清除特定位274

19.2.1 x86274

19.2.2 ARM+Optimizing Keil 6/2013(ARM mode)277

19.2.3 ARM+Optimizing Keil 6/2013(Thumb mode)278

19.2.4 ARM+Optimizing Xcode(LLVM)+ARM mode278

19.2.5 ARM:BIC指令详解278

19.2.6 ARM64:Optimizing GCC(Linaro)4.9278

19.2.7 ARM64:Non-optimizing GCC(Linaro)4.9279

19.2.8 MIPS279

19.3 位移279

19.4 在FPU上设置特定位279

19.4.1 XOR操作详解280

19.4.2 x86280

19.4.3 MIPS282

19.4.4 ARM282

19.5 位校验284

19.5.1 x86286

19.5.2 x64289

19.5.3 ARM+Optimizing Xcode 4.6.3(LLVM)+ARM mode291

19.5.4 ARM+Optimizing Xcode 4.6.3(LLVM)+Thumb-2 mode292

19.5.5 ARM64+Optimizing GCC 4.9292

19.5.6 ARM64+Non-optimizing GCC 4.9292

19.5.7 MIPS293

19.6 本章小结295

19.6.1 检测特定位(编译阶段)295

19.6.2 检测特定位(runtime阶段)295

19.6.3 设置特定位(编译阶段)296

19.6.4 设置特定位(runtime阶段)296

19.6.5 清除特定位(编译阶段)296

19.6.6 清除特定位(runtime阶段)297

19.7 练习题297

19.7.1 题目1297

19.7.2 题目2298

19.7.3 题目3301

19.7.4 题目4301

第20章 线性同余法与伪随机函数304

20.1 x86304

20.2 x64305

20.3 32位ARM306

20.4 MIPS306

MIPS的重新定位307

20.5 本例的线程安全改进版309

第21章 结构体310

21.1 MSVC:systemtime310

21.1.1 OllyDbg311

21.1.2 以数组替代结构体312

21.2 用malloc()分配结构体的空间313

21.3 UNIX:struct tm315

21.3.1 Linux315

21.3.2 ARM317

21.3.3 MIPS319

21.3.4 数组替代法320

21.3.5 替换为32位words322

21.3.6 替换为字节型数组323

21.4 结构体的字段封装325

21.4.1 x86325

21.4.2 ARM329

21.4.3 MIPS330

21.4.4 其他331

21.5 结构体的嵌套331

OllyDbg332

21.6 结构体中的位操作333

21.6.1 CPUID333

21.6.2 用结构体构建浮点数337

21.7 练习题339

21.7.1 题目1339

21.7.2 题目2340

第22章 共用体(union)类型345

22.1 伪随机数生成程序345

22.1.1 x86346

22.1.2 MIPS347

22.1.3 ARM(ARM mode)348

22.2 计算机器精度349

22.2.1 x86350

22.2.2 ARM64350

22.2.3 MIPS351

22.2.4 本章小结351

22.3 快速平方根计算351

第23章 函数指针352

23.1 MSVC353

23.1.1 MSVC+OllyDbg354

23.1.2 MSVC+tracer355

23.1.3 MSVC+tracer(指令分析)356

23.2 GCC357

23.2.1 GCC+GDB(有源代码的情况)358

23.2.2 GCC+GDB(没有源代码的情况)359

第24章 32位系统处理64位数据362

24.1 64位返回值362

24.1.1 x86362

24.1.2 ARM362

24.1.3 MIPS362

24.2 参数传递及加减运算363

24.2.1 x86363

24.2.2 ARM365

24.2.3 MIPS365

24.3 乘法和除法运算366

24.3.1 x86367

24.3.2 ARM368

24.3.3 MIPS369

24.4 右移370

24.4.1 x86370

24.4.2 ARM371

24.4.3 MIPS371

24.5 32位数据转换为64位数据371

24.5.1 x86372

24.5.2 ARM372

24.5.3 MIPS372

第25章 SIMD373

25.1 矢量化373

25.1.1 用于加法计算374

25.1.2 用于内存复制379

25.2 SIMD实现strlen()383

第26章 64位平台387

26.1 x86-64387

26.2 ARM394

26.3 浮点数394

第27章 SIMD与浮点数的并行运算395

27.1 样板程序395

27.1.1 x64395

27.1.2 x86396

27.2 传递浮点型参数399

27.3 浮点数之间的比较400

27.3.1 x64400

27.3.2 x86401

27.4 机器精402

27.5 伪随机数生成程序(续)402

27.6 总结403

第28章 ARM指令详解404

28.1 立即数标识(#)404

28.2 变址寻址404

28.3 常量赋值405

28.3.1 32位ARM405

28.3.2 ARM64405

28.4 重定位406

第29章 MIPS的特点409

29.1 加载常量409

29.2 阅读推荐409

第二部分 硬件基础413

第30章 有符号数的表示方法413

第31章 字节序415

31.1 大端字节序415

31.2 小端字节序415

31.3 举例说明415

31.4 双模二元数据格式416

31.5 转换字节序416

第32章 内存布局417

第33章 CPU418

33.1 分支预测418

33.2 数据相关性418

第34章 哈希函数419

单向函数与不可逆算法419

第三部分 一些高级的例子423

第35章 温度转换423

35.1 整数值423

35.1.1 x86构架下MSVC 2012优化423

35.1.2 x64构架下的MSVC 2012优化425

35.2 浮点数运算425

第36章 斐波拉契数列428

36.1 例子1428

36.2 例子2430

36.3 总结433

第37章 CRC32计算的例子434

第38章 网络地址计算实例437

38.1 计算网络地址函数calc_network_address()438

38.2 函数form_IP()439

38.3 函数print_as_IP()440

38.4 form_netmask()函数和set_bit()函数442

38.5 总结442

第39章 循环:几个迭代444

39.1 三个迭代器444

39.2 两个迭代器445

39.3 Intel C++2011实例446

第40章 达夫装置449

第41章 除以9452

41.1 x86452

41.2 ARM453

41.2.1 ARM模式下,采用Xcode 4.6.3(LLVM)优化453

41.2.2 Thumb-2模式下的Xcode 4.6.3 优化(LLVM)454

41.2.3 非优化的Xcode 4.6.3(LLVM)以及Keil 6/2013454

41.3 MIPS454

41.4 它是如何工作的455

41.4.1 更多的理论456

41.5 计算除数456

41.5.1 变位系数#1456

41.5.2 变位系数#2457

41.6 练习题458

第42章 字符串转换成数字,函数atoi()459

42.1 例1459

42.1.1 64位下的MSVC 2013优化459

42.1.2 64位下的GCC 4.9.1 优化460

42.1.3 ARM模式下Keil 6/2013优化460

42.1.4 Thumb模式下Keil 6/2013优化461

42.1.5 ARM64下的GCC 4.9.1优化462

42.2 例2462

42.2.1 64位下的GCC 4.9.1优化463

42.2.2 ARM模式下的Keil 6/2013优化464

42.3 练习题465

第43章 内联函数466

43.1 字符串和内存操作函数467

43.1.1 字符串比较函数strcmp()467

43.1.2 字符串长度函数strlen()469

43.1.3 字符串复制函数strcpy()469

43.1.4 内存设置函数memset()470

43.1.5 内存复制函数memcpy()471

43.1.6 内存对比函数memcmp()473

43.1.7 IDA脚本474

第44章 C99标准的受限指针475

第45章 打造无分支的abs()函数478

45.1 x64下的GCC 4.9.1优化478

45.2 ARM64下的GCC 4.9优化478

第46章 变长参数函数480

46.1 计算算术平均值480

46.1.1 cdecl调用规范480

46.1.2 基于寄存器的调用规范481

46.2 vprintf()函数例子483

热门推荐