2016-03-20 2 views
0

Когда я пытаюсь запустить свой файл .so на Android 6 я получил это сообщение:Как найти перемещение текста в файле .so?

Loading Native Audio Library... 
03-20 15:07:55.182 19446 19446 : Cannot Load Native Library !!! 
03-20 15:07:55.182 19446 19446 : java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.myapp.android.sdk-1/lib/arm/myso.so: has text relocations 

Из сообщения я могу понять, что у меня есть текст переезды в моем .so файл. скомпилировать с -fPIC не помогает, поскольку перемещение текста происходит в файлах сборки, которые я использую для оптимизации некоторых вычислений. Как узнать, где именно находятся текстовые перестановки в исходном коде?

+0

Ну, глядя на таблицу перемещений, тривиально с чем-то вроде readelf или objdump - вы спрашиваете, как связать эти смещения с местами в исходном коде? – Notlikethat

+0

@Notlikethat, я спрашиваю, как читать таблицу GOT и как связать смещения с исходным кодом. – VitalyD

ответ

1

Чтобы найти точное расположение текста relocs вы можете использовать scanelf -T

Вот руководство Gentoo о том, как исправить текст переездов в ваш бинарный файл: https://wiki.gentoo.org/wiki/Hardened/Textrels_Guide

Это было предупреждение в течение длительного время и Android-линкера начали применять это в Marshmallow для приложений, ориентированных на версию sdk> = 22 (для платформ lp32, таких как arm/x86/mips). И поддержка lp64 (arm64/x86_64/mips64) не существовала с самого начала.

Смежные вопросы