
经过上述分析后,我们决定要给该类的“initWithData”(这肯定是个初始化方法)使用LLDB添加断点。
(2)、定位断点地址
经过第一步找到添加断点的类中的方法后,接下来我们要计算出该方法的内存地址,然后使用LLDB给该地址添加断点。通过Hopper我们很容易定位到上述的“initWithData:”方法,的位置,如下所示。下方截图中这个带“星号”的地址就是“initWithData:”方法偏移前的基地址。根据上面的公式我们很容易就可以计算出该方法“偏移后的基地址”也就是真正的内存地址。算法如下所示:
initWithData内存地址 = 0x1304b60 + 0x5b000(ALSR偏移) = 0x135FB60

(3)、添加断点
使用下述命令,给上述地址添加断点。断点添加后,点击登录按钮就会跳转到“手机号登录”页面就会执行该断点,下方截图的红框中就是“断点”执行后的效果。从下方截图中我们可以看出该断点的编号是1,Breakpoint后方就是断点编号,该编号会在操作断点是会用到,下方会给出实例。
br s -a 0x135FB60

(4)、断点的单步执行(ni, si)
你可以通过nexti (简写:ni)和stepi (简写:si)来进行单步的调试。ni遇到跳转不会进入到跳转中去,而si则会跳转到相应的分支中去。下方就是通过si和ni进行单步调试的效果截图。

(5) 放开执行该断点(c)
命令c可以执行该断点, 上面这种情况如果执行c命令,因为只有一个断点,该断点执行后,就会跳转到“手机号登陆页面”。
(6)断点的禁用和开启
上面也有提到,上述创建的断点的编号是1,我们要对该断点进行禁用和开启操作,具体命令如下所示:










