Как отличить файлы ELF, работающие на Android и на традиционном Linux? - PullRequest
0 голосов
/ 10 октября 2019

Я получил файл ELF (исполняемый и связываемый формат), как узнать, предполагается ли его использовать на традиционной платформе Linux или на платформе Android?

На Android большинство файлов .so. Я пытался использовать некоторые строки, встроенные в файл, такие как функции JNI или библиотеки "Ljava", чтобы различать их, но результат кажется не очень хорошим.

Есть ли более точный способ их различения?

1 Ответ

0 голосов
/ 17 октября 2019

Вы, вероятно, можете сделать это, используя readelf --dynamic, чтобы прочитать записи DT_NEEDED и различить их, используя SONAME для libc. В системе glibc у вас, скорее всего, будет libc.so.6, хотя есть и другие библиотеки, например, musl. Libc, который использует Android, является Bionic, поэтому он, вероятно, будет другим.

Это не работает для статических двоичных файлов, таких как большинство двоичных файлов Go, но большинство людей не распространяют статические двоичные файлы для Android.

Для исполняемых файлов вы также можете прочитать заголовок PT_INTERP, который сообщит вам, какой динамический компоновщик используется. Это должно отличаться в разных системах.

...