Arm64 汇编BL 跳转问题

arm64的汇编指令BL,跳转到的是一个地址,这个地址我在IDA分析的二进制文件中并没有找到,而且在IDA中点击也不会跳转到相应的函数,请问我怎么才能找到这个地址对应的函数?


跪谢!!!

1 个赞

我是采用 LLDB 动态调试的办法,下断点到那条命令,然后(如果是 objc_msgSend 的话)就用命令 po (char *)x1 ,一般都能打印出方法名;如果不是,就 si 进入到函数里面看。你图上的这个条指令应该就是 objc_msgSend

嗯,一定要 IDA 静态调试的话,我也不知道用什么办法。。。。

希望有所帮助^_^

po (char *)$x1 打印出来的就是当前方法,si 之后打印x1还是那个外面的方法,我认为这个x1储存的就是当前方法。你说的那种方法不好使啊,si 进入也看不到方法名。。。

我的意思是,断点下在 "基地址+0x190217128" 这个地方,也就是你图中红线框着的地方,然后再打印 x1 。其实也可以往上推两步,ADRP 和 LDR 两条指令,就是为了获取将要调用的方法所在的地址,你试着点击 selRef_97 那个蓝色部分,就是 BL 将要执行的方法。但貌似是外部的方法,所以应该没有具体的执行代码,要去相应的可执行文件中找。

感谢回答!google了一圈没发现其他办法,只能setp-into然后查看是哪个二进制文件,再把这个二进制文件扔到IDA里面,用当前setp-into的地址减去那个二进制文件的基地址偏移就能看到了。

我不知道你的电脑配置怎么样,我分析一个60MB左右的binary就需要将近半个小时的时间,整个dyld_cache?

24小时多一点, 挂在那就好了, 最后 idb 有 5G 左右