arm64的汇编指令BL,跳转到的是一个地址,这个地址我在IDA分析的二进制文件中并没有找到,而且在IDA中点击也不会跳转到相应的函数,请问我怎么才能找到这个地址对应的函数?
跪谢!!!
我是采用 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 左右