Подтвердить что ты не робот

Mylib.so имеет текстовые перестановки. Это напрасно тратит память и представляет угрозу безопасности. Пожалуйста исправьте

Мое приложение для Android (с использованием родной библиотеки) напечатает это предупреждение на Android 4.4:

linker mylib.so имеет перемещение текста. Это напрасно тратит память и представляет угрозу безопасности. Пожалуйста, исправьте.

У вас есть представление о том, что это такое и как его исправить? Спасибо,

4b9b3361

Ответ 1

Это, по-видимому, является результатом двух ошибок ndk-gcc, упомянутых в https://code.google.com/p/android/issues/detail?id=23203

и заявил, что он был зафиксирован как ndk-r8c.

Похоже, что проверка для библиотек с проблемой была добавлена ​​только недавно.

Примечание: пожалуйста, не отредактировать это сообщение, чтобы скрыть URL ссылки. Это явное, потому что назначение является тем, что делает его авторитетным.

Дополнительная заметка Изменение версий NDK - это только исправление, когда предупреждение связано с кодом вашего приложения. Он будет иметь без эффекта, если вместо этого стоит предупреждение на системном компоненте, таком как libdvm, который может быть исправлен только при обновлении системы.

Ответ 2

Вам нужно сделать код в своей ячейке независимой... добавьте -fpic или -fpic к вашему LOCALC_FLAGS в Android.mk, и вам также необходимо убедиться, что вы не связываетесь с каким-либо статическим или разделяемые библиотеки, которые сами содержат ретрансляции текста. Если они это сделают, и вы можете скомпилировать их, используйте один из упомянутых выше флагов.

Ответ 3

Короче говоря, вам нужно скомпилировать вашу библиотеку с одним из флагов -fpic или -fpic, где PIC является аббревиатурой для Позиция независимого кода.

Более длинный ответ заключается в том, что ваш файл yourlib.so был скомпилирован таким образом, который не соответствует стандарту Google Android для файла ELF, где эта запись Dynamic Array Tag является неожиданным. В лучшем случае библиотека все равно будет работать, но она по-прежнему является ошибкой, и будущая версия AOS, вероятно, не позволит ей запускаться.

DT_TEXTREL 0x16 (22)

Чтобы проверить, что в вашей библиотеке используется что-то по строке:

# readelf --wide -S yourlib.so

There are 37 section headers, starting at offset 0x40:

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        0000000000000000 002400 068f80 00  AX  0   0 16
  [ 2] .rodata           PROGBITS        0000000000000000 06b380 05ad00 00  WA  0   0 32
  ...
  [16] .rela.text        RELA            0000000000000000 26b8e8 023040 18     14   1  8
  ...
  [36] .rela.debug_frame RELA            0000000000000000 25a608 0112e0 18     14  27  8

Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

Пожалуйста, см. мой обширный ответ по этой теме, для более подробной информации DT entry. Подробнее о том, как писать правильные динамические библиотеки это обязательное чтение.

Ответ 4

Я получил ту же ошибку с моим приложением. Приложение использовало собственный демона, который использовал собственную библиотеку, которая не выполняла все функции в своем заголовочном файле. Когда я добавил необходимые реализации в родную библиотеку, все просто сработало.

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

Ответ 5

Переезд libnba2k13.so:relocations