版本 第三版
平台 iOS.12
语言 Swift 4.2
编辑 Xcode 10.

了解Apple软件调试器,LLDB的强大秘密!

在Advanced Apple调试和逆向工程中,您将实现调试是一个令人愉快的过程,可以帮助您更好地了解软件。您不仅会学会更快地发现错误,但您还将了解其他开发人员如何解决与您类似的问题。

您还将了解如何创建自定义,功能强大的调试脚本,这些脚本将帮助您快速找到任何一点开奖结果3d背后的秘密,这些开奖结果3d可以提出您的兴趣。

阅读本书后,您将拥有工具和知识,即使是关于开奖结果3d的最晦涩的问题 - 或其他人也是如此。

本书是用于熟悉SWIFT或Object-C的中级到高级IOS / MacOS开发人员,并希望将调试技能带到下一个级别。

在你开始之前

本节告诉您您在开始之前需要了解一些需要了解的事情,例如您需要的硬件和软件,在哪里找到本书的项目文件等等。

i

关于封面

自由

III

第一部分:开始LLDB命令

本节将介绍使用LLDB,Apple软件调试器的基础知识。您将浏览名为的应用程序 信号,一个Objective-C / Swift应用程序,说明UNIX信号如何在应用程序中处理。您将学习一些策略来查找和创建Swift语法样式断点以及Objective-C Style断点。到本节结束时,您将能够使用调试器来执行调试所需的大多数基本任务,以及创建自己的简单自定义命令。

入门

自由

在本章中,您将熟悉LLDB并调查内省和调试程序的过程。您可以通过重新调整一个您甚至没有写的程序开始 - Xcode!

1

就像任何可爱的开发人员工具一样,LLDB船舶具有健康的文档。知道如何浏览此文档 - 包括一些更模糊的命令标志 - 对于掌握LLDB至关重要。

2

既然你已经了解了两个最重要的命令,帮助和apropos,它是时候调查LLDB如何处理自己的过程。您将了解您可以使用各种选项将LLDB附加到流程的所有不同方式,以及在附加到进程时幕后发生的方式。

3

无论您是使用Swift,Objective-C,C ++,C还是技术堆栈中完全不同的语言,您都需要学习如何创建断点。单击Xco​​de中的侧面面板很容易使用GUI创建断点,但LLDB控制台可以让您更加对断点的控制。

4

既然你已经学会了如何设置断点,所以调试器将停止在开奖结果3d中,现在是时候从您调试的任何软件中获取有用信息了。在本章中,您将了解表达式命令,该命令允许您在调试器中执行任意开奖结果3d。

5

您已经学习了如何创建断点,如何打印和修改值,以及如何在调试器中暂停时执行开奖结果3d。但到目前为止,您已经留下了高度,并在如何在调试器中移动,并在立即检查数据后检查数据。在本章中,您将在LLDB暂停时,您将了解如何在LLDB时移动调试器进出功能。

6

现在是时候探索了通过LLDB的权力查找感兴趣的开奖结果3d的最佳工具之一了。在本章中,您将深入了解图像命令。

7

通过监视读取或写入内存来学习有吸引力的替代方案来创建断点。

8

在本章中,您将学习如何通过.lldbinit文件持续这些选择。通过持续选择和为自己制作方便命令,您的调试会话将更加顺畅和高效地运行。这也是一个重要的概念,因为从这里出门,你将使用 .LLDBINIT文件定期。

9

在上一章中,您了解了Command Alias命令以及如何通过LLDBinit文件持久命令。不幸的是,命令别名有一些限制。 LLDB命令命令Regex非常类似于命令别名,除了您可以为输入解析并应用于命令的操作部分的输入之外。

10

第二节:了解集会

了解计算机在开奖结果3d下面的所有1秒和0s做什么时是一个很好的技能,可以在挖掘有关程序的有用信息时拥有。本节将您设置为您需要的理论,您需要在本书的其余部分需要创建复杂的调试脚本 - 并向您介绍逆向工程开奖结果3d背后的基本理论。

现在,您已经获得了对调试器周围的如何操纵的基本了解,是时候逐步下降了可执行的Jenga Tower并探索构成源开奖结果3d的1S和0。本节将专注于调试的低级方面。

11

在本章中,您将浏览程序如何执行。您将查看用于告诉处理器的特殊寄存器,在那里它应该读取下一个指令,以及内存的不同大小和分组如何产生非常不同的结果。

12

“通过堆栈传递”的意思是什么意思?通过探索一些“堆栈相关”寄存器以及堆栈中的内容来从组装立场调用函数时,潜水更深入地进入发生的事情的时候了。

13

第三节:低水平

在您稳健以下的汇编器理论的基础,是时候探索程序如何工作的其他方面了。本节是一种黯然失色和有趣的研究,越来越富有逆向工程,很少使用API​​和调试策略。

如在本书的介绍中提到,调试并不完全是关于修复的东西。调试是更好地了解幕后发生的事情的过程。在本章中,您将探讨调试的基础,即负责将自身附加到另一个进程的过程的系统调用:Ptrace。

14

有动态框架是学习,调试和逆向工程的一个非常有趣的方面。由于您有能力在运行时加载框架,您可以使用LLDB探索运行时在运行时执行开奖结果3d,这对于公共和私人框架中的Spelunk非常重要。

15

是时候了解与这些框架开发的互补技能了。在本章中,您将了解“钩”进入SWIFT和C开奖结果3d的方法和策略以及您通常无法访问的执行方法。

16

您将通过使用Objective-C运行时挖掘到Objective-C框架来挂钩并执行感兴趣的方法来删除此一轮的动态框架探索。

17

用于在任何Apple硬件上运行的编译程序的文件格式。本章讨论如何阅读此信息。

18

现在你已经了解了理论,是时候有一些乐趣了。了解如何在Apple框架中搜索诅咒词语并在赌博游戏中作弊。

19

本章将为您提供开奖结果3d签名的基本概述,通过您可以选择Apary A OOS应用程序,并学习如何重新签名并将其安装到IOS设备上。

20

第四节:自定义LLDB命令

您已经学习了基本的LLDB命令,该命令进入开奖结果3d和制作程序的杂项低级概念......嗯,一个程序。

现在是时候将知识放在一起,以创建一些非常强大和复杂的调试脚本。正如您很快看到的那样,您只能受到您的技能和想象力的限制 - 并找到正确的类(或头文件)来进行调试竞标。

LLDB船用集成的Python模块,允许您通过Python访问调试器的大多数部分。这使您可以利用Python(及其模块)的所有权力来帮助揭示任何黑暗的秘密Vex。

在方便和复杂之间的权衡中,是LLDB的脚本桥接。通过脚本桥接,您可以做到您喜欢的任何事情。脚本桥接是一个Python接口LLDB用于帮助扩展调试器以完成最疯狂的调试梦想。

21

您需要一种有条理的方法来弄清楚LLDB脚本中出现了出现问题,以便您不会拉出头发。在本章中,您将浏览如何使用Python PDB模块检查LLDB Python脚本,该模块用于调试Python脚本。

22

您已经了解了使用LLDB的Python模块的必要性,以及如何使用Python的PDB调试模块纠正任何错误。现在,您将探索LLDB Python模块中的主要播放器,以良好的主要部​​分概述。在本章中,您将为此脚本添加一些参数并处理一些恼人的边缘案例,例如在Objective-C和Swift之间的处理命令。

23

创建自定义调试命令时,您通常希望根据提供给命令的选项或参数略微调整功能。一个自定义LLDB命令只能有一种方式是一种无聊的单窍门小马。在本章中,您将浏览如何通过可选的参数(AKA选项)以及您的自定义命令以改变自定义LLDB脚本中的功能或逻辑的参数(预期的参数)。

24

到目前为止,在评估JIT开奖结果3d(即,通过Python脚本执行的Objective-C,Swift,C等开奖结果3d),您已经使用了一小组API来评估开奖结果3d。现在是时候谈论LLDB Python模块,sbValue以及如何简化解析JIT开奖结果3d输出的新类了。

25

在本节中的其余章节中,您将专注于Python脚本。如上一章所示,图像查找-rn命令就在出路。完成本章后,您将有一个名为“查找”的新脚本,以更清晰的方式查询。

26

当LLDB对抗被剥离的可执行文件(可执行文件没有矮人 调试信息),LLDB不会有符号信息来为您提供堆栈跟踪。相反,LLDB将为它识别为方法的方法生成合成名称,但不知道该怎么称呼它。在本章中,您将构建一个LLDB脚本,该脚本将在堆栈跟踪中再次将被剥离的Heaperi-C功能进行再现。

27

对于本节的最终章节,您将通过同一步骤,我自己采取了了解Mallocstacklogging环境变量如何使用在创建对象时获取堆栈跟踪的方法。从那里,您将创建一个自定义LLDB命令,它为您提供了在存储器中分配或在内存中解除分配的对象时的堆栈跟踪 - 即使堆栈跟踪长度从调试器中消失。

28

第V节:DTRACE

什么?你从未听说过DTrace?!太棒了! DTRACE是一种工具,可让您在动态中探索开奖结果3d& static ways.

http://dtrace.org/guide/preface.html

您可以创建要编译到开奖结果3d(静态)的DTRACE探针,或者您可以检查已编译和运行(动态)的任何开奖结果3d。 DTrace是一个多功能工具:它可以是探查器,分析仪,调试器或您想要的任何内容。

我经常会使用DTRACE在我想要探索的开奖结果3d上施放宽阔的网,当我没有任何线索时,我应该开始。

您将浏览DTrace在已编译的应用程序中追踪Objective-C开奖结果3d的方式非常小的部分。使用DTrace观察iOS框架(如uikit)可以为您提供令人难以置信的深入了解作者设计的开奖结果3d。

29

本章将作为更多的DTRACE基本面,破坏性行动(YAY!),以及如何使用SWIFT使用DTRACE。在本章中,您将了解DTrace可以进行额外的方式DTrace可以配置文件开奖结果3d,以及如何在不铺设实际可执行文件本身的情况下增强现有开奖结果3d。

30

在本章中,您将使用DTRACE钩钩objc_msgsend的条目探测器,并将类名与该类的Objective-C选择器一起拉出。到本章末尾,您将拥有LLDB生成DTRACE脚本,该DTRACE脚本只生成用于在调用OBJC_MSGSEND的主要可执行文件中实现的开奖结果3d的跟踪信息。

31

32

附录

见团队

贡献者

这本书是给谁的

本书是用于高级开发人员的中级 想要将调试和开奖结果3d探索游戏带到一个下一个级别。

本书涵盖的概念

  • Master LLDB.
  • 汇编召唤惯例
  • 使用Python自定义LLDB
  • DTrace.
  • 现实世界案例研究

版本历史记录

第三版·iOS 12,Swift 4.2,Xcode 10

v3.0·2018年10月29日·Derek Selander
pro

高级Apple调试& Reverse Engineering

By Derek Selander

在我们的高级Apple调试和逆向工程书中,您将浏览LLDB的开奖结果3d,以了解任何程序的更多信息。

免费阅读Ultimate Pro订阅* *包括我们在线图书馆中的所有其他书籍 查看所有优点
单独购买59.99美元* *包括访问所有在线阅读功能。
请参阅购买选项
隐藏购买选项

所有视频。所有书籍。
One low price.

A RaywenderLich.com订阅是学习和掌握移动开发的最佳方式 - 计划从19.99美元/月开始!

了解iOS,Swift,Android,Kotlin,Flutter和Dart开发,并解锁我们的50+书籍和4,000多个视频的大规模目录。