为什么MSGetImageByName在arm64获取不到Image?

我用MSGetImageByName来获取动态库的Image,在iPhone5/9.0.2上可以获取到,但是换到iphone6上的9.0和8.4系统上都获取不到,感觉跟arm架构有关系,查看了/system/library/caches/dyld_shared_cached_arm64, dump64位的库找不到,提示这个库只有小端32位的,这里面有什么玄机吗,谁能告诉我怎么找到这个动态库?

你在iOS的命令行里运行一下ls /System/Library/Caches/com.apple.dyld ,看看输出什么?

dyld_shared_cache_arm64 dyld_shared_cache_armv7s

这个就是64位的cache,decache一下应该就可以找到那个动态库了

但是部分库会提示
Dumping ‘/usr/lib/liblockdown.dylib’…
Error: Cannot dump ‘*****/usr/lib/liblockdown.dylib’. Only 32-bit little-endian single-file
Mach-O objects are supported.
这样的错误,而且更重要的是在代码里,用MSGetImageByName找不到这个库。

已解决。是我自己误会了,我将拿到的image,放到if里面:
if(image != NULL){
//然后取symbol
}
结果就一直显示image 是null,其实不判断直接执行后面的代码是可以获取到symbol的。

原来dyld_decache这个工具不支持64位的,怪不得我出错了。
使用了您的帖子64位里的新方法,成功了,感谢!