有关执行 ni 命令后,下一步跳转到其他地址的问题

大家好,我的问题出现在书上 寻找“获取本机号码”的目标函数(P198) 的步骤中,关于函数 [PhoneSettingsController myNumber:] 的地方,我是用的 ARM64 ,因此跟书上有些不同,下图是 IDA 中显示的(蓝色注释部分是我自己添上去的):

我的问题是:我在 LLDB 中执行到上图黄色底色部分的时候,继续执行 ni 命令,但跳转到了另外一个地方,既不是下一步“ mov x23, x0 ”,也不是黄色地址所在的地方,如下图:

而且继续执行到最后,也不会再跳转到 [PhoneSettingsController myNumber:] 这个函数了,而是返回到了它的上层调用函数。请问一下大家,这种情况是为什么呢?谢谢大家的回复!

关于这个问题我好像有一点思路了,是因为 BL 指令的问题,这条指令是说,跳转到该地址,执行完后返回 LR 所在地址的位置。这个地方应该是 LR 寄存器里还保存的调用这个函数的父函数地址,而不是函数内部BL指令的下一条指令地址,因此执行 ni 命令会直接返回到这个函数的父函数处。

我暂时的解决办法是 si 到这个跳转函数内部去,直到出现最内部的汇编代码(比如 objc_msgSend 可能会 si 两到三次),然后执行命令 finish 即可回到下一条指令处。