Hopper+lldb 遇到的问题

使用的手机是iphone 6,debugserver 用lipo thin arm64了的,hopper和lldb都是arm64架构的,通过image list -o -f 获取的 ASLR偏移量 + 某方法在hopper中的地址 ,对这个地址进行br s -a address,发现得到的地址和br s -S function 断点的地址是不一样的,是什么原因造成这种问题?,表示不理解,有大大解释下?

首先br s -S selectorName是针对有符号的下断点方式,这时候返回的是一个方法IMP偏移的某个地址(一般来说基于源码的调试,对方法下断点的时候都不是直接在第一条指令下断点)
然后你用br s -a address下的断点,肯定是绝对的地址,由于你这里的地址就是方法IMP的地址即第一条指令的地址。所以上面的方式是IMP的某个偏移位置。
综上,两种都能对方法下断点,但br s -S selectorName在符号表strip以后就不行,你可以理解为源码调试的时候用的比较方便。br s -a address无论符号表是否被strip都可以。对一个确定的地址下断点。
至于为什么br s -S selectorName不断在第一条指令,我理解在于都基于源码调试了没必要断在第一条指令的位置,反正也是源码级调试。减少单步执行的次数?

但是我到的问题是对地址下断点根本就不进断点

要么是方法没调用,要么你地址计算错误。
另外你可以用xia0LLDBxbr "-[classname methodName]"下断点试试

1 个赞

对方法断点进去了,对方法的地址:heavy_plus_sign:偏移量,就进不去,然后我检查了,hopper是arm64 ,debugserver也是arm64,然后我就懵逼了

那应该是你地址计算错误,建议用我上面的下断点。你比较下和你手动计算的地址是否一致就知道了。

我怀疑的也是地址错误,就是找不到哪导致地址出问题了,:sweat_smile: