在iOS中使用共享对象文件(.so文件)

Ril*_*eyE 4 shared-objects ios

我已经获得了一个共享对象文件(.so)及其中的函数,但我不知道如何使用它,或者改变它以便在iOS应用程序中使用.有人能指出我正确的方向吗?

我知道.so来自一个Android应用程序,但我被告知我可以让它在iOS应用程序中工作.

小智 7

实际上和技术上,是的,你可以,但不是你想象的方式.

如果它来自Android,它可能是为ARM编译的.因此它应该与iOS设备中的ARM CPU二进制兼容.但是,iOS不使用通常的共享对象格式(即ELF格式),而是使用iOS和OS X自己的Mach-O格式.

这意味着您无法直接链接此共享对象文件,也无法将其直接传递给dlopen()dlsym().你必须进入严重的黑客行为(你可能不知道的事情).这涉及正确加载和重新定位文件.

iOS jailbreak开发人员和黑客,Comex的GitHub存储库Frash,一个用于越狱iOS设备的Flash播放器,可以找到这方面的一个例子.Comex基本上为iOS编写了一个ELF加载器模块(被称为"食物")并用它来制作Android的libflashplayer.so在iOS上工作.挺整洁的,对吧?

另请注意,AppStore应用程序无法实现这一点,因为它需要动态加载和操作系统中的各种更改.