Android:dlopen()为64位架构

时间:2017-03-16 06:48:40

标签: android c linux x86-64 dlopen

我使用

构建了32和64架构的应用程序
APP_ABI := x86_64 x86 armeabi-v7a arm64-v8a

我正在JNI方面做dlopen()。对于32位arch dlopen()正常工作并返回有效的void指针。 我可以在struct soinfo中输入转换此指针。以下是dlopen()转储32位。

libjavacore.so\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\004\F0۱\00\00\00\00\00\00\00\00\F0۱\00\80\00\00\00\00\00\D0C߱\00\00\00\00\00\00\00\00\F4\83\F5\B4\00\00@\A8ܱH\F1۱ \00\00\E6\00\00$jܱHrܱ\00\00\00\00\A0\ADܱ\80\00\00\E0}ܱ\F8\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\ACC߱\00\00\00\00\00\00\00\00\00\00\00\A6ޱ\91\00\00\00\00\00\00\F0۱\A4\82\F5\B4\D0C߱\F8\F4d\ADx\DFԵ\00\00\00\00\F0۱\00\00\00\00\00\00\00\00\B3\00\00\A3\00\00\E4OӶ\ACp汴y汴y\E6\B1\00\00\00\00\00\00\00\00\00\00\00\00tJ\00\00libmedia_jni.so\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\004\00\82\AD\00\00\00\00\00\00\00\00\00\82\AD\00\D0\00\00\00\00\00ܰ\85\AD\00\00\00\00\00\00\00\00D\85\F5\B4\00\00@\E8<\82\ADH\82\AD  \00\00\BA\00\00\9C͂\AD\C0Ղ\AD\00\00\00\00\80\83\AD\00\00\A8䂭{\00\00\00\00\00\00\00\00\00\00Ȱ\85\AD\00\00\00С\85\AD\00\00\00\00\00\00\00\00\00\00\00\ۄ\ADk\00\00\00\00\00\00\00\82\AD\F4\83\F5\B4ܰ\85\ADH\F6d\ADH\86\F5\B4\00\00\00\00\00\82\AD\00\00\00\00\00\00\00\00\B3\00\00\B3\00\00\BCp\E6\B1\FCq\E6\B1\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\AC\90\00\00libexif.so\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\004@\AD   \00\00\00\00\00\00\00\00@\AD\00\C0\00\00\00\00\00\E4쁭\00\00\00\00\00\00\00\00\94\86\F5\B4\00\00@\BCL\AD\8CA\AD\83\00\00\00\B3\00\00\00\88Z\AD\94\\AD\00\00\00\00Ȥ\AD\85\00\00\00`_\AD\AD\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\E0쁭\00\00\00\00\00\00\00\00\00\00\00D[\80\AD\89\00\00\00\00\00\00\00@\ADD\85\F5\B4\E4쁭\F8\84\F5\B4\98\87\F5\B4\00\00\00\00@\AD\00\00\00\00\00\00\00\00\B3\00\00x\00\00r\E6\B1\r\E6\B1q\E6\B1q\E6\B1\00\00\00\00\00\00\00\00

但是对于64 arch dlopen()没有返回有效指针。我无法将其输入struct soinfo。下面是64位的dlopen()转储

@\F0hn\FC\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F0hn\FC\00\00\00p\00\00\00\00\00(on\FC\00\00\98\9D[t\FC\00\00A\00\00@\00\00\00\00h9in\FC\00\00\88\F2hn\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`jn\FC\00\00\8D\00\00\00\00\00\00p\95in\FC\00\00\AA\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00(on\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F0hn\FC\00\00Pԉt\FC\00\00(on\FC\00\00p\9E[t\FC\00\00\90\9A[t\FC\00\00\00\00\00\00\00\00\00\00\F0hn\FC\00\00\00\00\00\00\00\00\00\00\FD\00\00\00\00\00\00\00\00\00\00\00\00#pt\FC\00\00X"pt\FC\00\00/pt\FC\00\00/pt\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00P\00\00\00\00\00\00\83\00\00\00\00\00\00\00\8Ain\FC\00\00<\83in\FC\00\00\00\00\00
\00\00\00\90\89in\FC\00\00\A8\9B[t\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\859in\FC\00\001\00\00\00\00\00\00\00\00\00\00\00\00\00\00Pԉt\FC\00\00\8Fin\FC\00\00\F4\94in\FC\00\00\00\00\00\00\00\00\00\95in\FC\00\00\00\00\00\00\00\00\00'\00\00\00\00\00\00@`?i\FC\00\00    \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`?i\FC\00\00\00\A0\00\00\00\00\00\F8\ACGi\FC\00\00\00\B8l\FC\00\00A\00\00@\00\00\00\00\D8\C6?i\FC\00\00\88b?i\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00-Ai\FC\00\00\A2\00\00\00\00\00\00\F0\91@i\FC\00\00w\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00ЬGi\FC\00\00\00\00\00\00\00\00\00\80~Gi\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00`?i\FC\00\00\D0ԉt\FC\00\00\F8\ACGi\FC\00\00\E0\00\B8l\FC\00\00\80\9C[t\FC\00\00\00\00\00\00\00\00\00\00`?i\FC\00\00\00\00\00\00\00\00\00\00\FD\00\00\00\00\00\00\00\00\00\00\00\00H!pt\FC\00\00\98&pt\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\AF\00\00\00\00\00\00   \00\00\00\00\00\00\F8w@i\FC\00\00\9Cx@i\FC\00\00?\00\00\00\00\00\00\F8u@i\FC\00\00\98\9D[t\FC\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\F5\C6?i\FC\00\001\00\00\00\00\00\00\00\00\00\00\00\00\00\00\D0ԉt\FC\00\00T\89@i\FC\00\00\B0\91@i\FC\00\00\00\00\00\00\00\00\00̑@i\FC\00\00\00\00\00\00\00\00\00'\00\00\00\00\00\00\00\00\00\00\00\00\00\00 

对于64位架构,还有其他方法可以dlopen()吗? 我还浏览了binoic的{​​{1}}源代码,但无法找到任何解决方案。

1 个答案:

答案 0 :(得分:1)

dlopen的返回值是一个不透明的句柄,可以用void *类型表示。没有理由认为你应该能够取消引用它。如果仿生支持它们,dlinfodl_iterate_phdr可能会为您提供所需的信息。