请问如何用lldb+hopper动态调试一个动态库

我不知道是否可以,所以在这里请教一下。
动态库文件.dylib是注入到app中了;把这个dylib文件拖入hopper分析,能看到分析结果。
我调试过普通的app,根据hopper中对应方法名的基地址+偏移量 去下断点,但是动态库dylib文件 在hopper中显示的地址怎么对应呢???这个dylib文件是被注入到这个app的,运行这个app,lldb下断点的时候 怎么能找到dylib文件中方法在当前app中的 正确地址呢??

动态库跟你的app一样被加载了,所以,在lldb状态使用 “image list -o -f”语句 能查看到你开启的那个app的地址和偏移量,此时你仔细查找一下,也能看到你那个dylib文件。

1 个赞

书上讲了,dylib跟其他的frameworks没有区别,都可以在im li -o -f中看到,就跟你自问自答的一样

1 个赞

恩,一开始没想到。之后想了许久就想明白了,于是自问自答了。Thanks:sweat_smile:

我想在这问一句相关的问题,我把一个 dylib 文件拖进项目的 xcode 中,手机运行,然后我用 lldb 调试,可是我用image list 看到工程里很多的动态库,唯独看不到我自己拖进去的那个,搜索没找到.xcode 里面明明有build Phases 的关联,为什么唯独找不到这个动态库呢

先用otool看一下你的动态库是不是真的被注入了。
其次确认一下你的动态库是不是被调用了,如果没被调用,有可能因为懒加载的原因,动态库没有被加载到内存,或者干脆动态库就没有被链接到应用里。
或者在other link flag里加上-all_load 或者 -force_load 强行引用
或者用一些其他trick手段,比如在在constructor里加入假的调用,强行链接。

2 个赞