Использование файла общих объектов в iOS (файл .so)

Мне дали файл Shared Object (.so) и функции внутри него, но я понятия не имею, как его использовать или изменить для использования в приложении iOS. Может ли кто-нибудь указать мне в правильном направлении?

Я знаю, что .so взято из приложения для Android, но мне сказали, что я могу заставить его работать и в приложении для iOS.


person RileyE    schedule 28.11.2012    source источник


Ответы (2)


На самом деле и технически, да, вы можете, но не так, как вы могли подумать.

Если он пришел из Android, он, вероятно, скомпилирован для ARM. Таким образом, он должен быть двоично-совместим с процессором ARM в устройствах iOS. Однако iOS использует не обычный формат общих объектов (то есть формат ELF), а собственный формат Mach-O iOS и OS X.

Это означает, что вы не можете напрямую ссылаться на этот общий объектный файл и не можете передать его напрямую dlopen() и dlsym(). Вы должны серьезно заняться взломом (то, чего вы, вероятно, не знаете). Это включает в себя загрузку и перемещение файла должным образом.

Пример этого можно найти у разработчика джейлбрейка iOS и хакера, репозитория Comex на GitHub Frash, Flash-плеер для взломанных iOS-устройств. По сути, Comex написала модуль загрузчика ELF (названный «еда») для iOS и использовала его, чтобы заставить libflashplayer.so Android работать на iOS. Довольно аккуратно, да?

Также обратите внимание, что это невозможно для приложений AppStore, поскольку для этого требуется динамическая загрузка и различные изменения в ОС.

person Community    schedule 28.11.2012
comment
Замечательно! Спасибо. Мне не нужно, чтобы это было отправлено в магазин приложений, так что это должно сработать для меня очень хорошо. - person RileyE; 29.11.2012

хотя технически это возможно (см. ответ h2co3), для чего-либо практического ответа нет

  • поэтому файлы не в правильном двоичном формате
  • даже если бы они были, динамическая загрузка не разрешена магазином приложений
person Daij-Djan    schedule 28.11.2012
comment
Это не совсем практическое приложение. Вероятно, он навсегда останется в режиме разработки и никогда не попадет в производство. Зато отлично справляется со своей задачей! - person RileyE; 29.11.2012
comment
@Daij-Djan: Мы видим, что некоторые SDK, такие как facebook/(или) Other, имеют динамическую библиотеку (.dylib). Мы также можем загрузить это в магазин приложений. Как создать его с помощью xcode? - person Vineesh TP; 25.05.2016
comment
см. stackoverflow.com/questions/4733847/ -- поскольку ios8 разрешено яблоком - person Daij-Djan; 25.05.2016
comment
вам нужно начать с mac dylib и изменить его на ios и arm64, вот и все. вопрос должен ответить на него. если вам нужна дополнительная помощь, пожалуйста, задайте специальный вопрос здесь, на SO. Я не могу вам помочь из-за нехватки времени - person Daij-Djan; 25.05.2016