我一直在对这个 android x86 ELF 二进制文件进行逆向工程。根据我的研究,当 loadLibrary() 被调用时,函数 JNI_onLoad 应该被执行,但是这个二进制文件没有它。我想我对 loadlibrary() 实际在做什么感到困惑。我如何找到这个二进制文件的第一个函数或入口点?
调用 Java loadLibrary() 时在 ELF 二进制文件中执行哪些代码
逆向工程
安卓
2021-06-24 02:36:08
1个回答
loadLibrary(..)将本机库加载到当前进程中。除了调用JNI_onLoadthis 只是一个标准库加载,因为它是由dlopen(..). 请注意,作为此常规库加载过程的一部分,库中的某些代码部分可能会自动执行。但这并不是 Java/JNI 特有的。有关更多详细信息,请参阅Stackoverflow.com 上的此问题。
该JNI_onLoad功能是 AFAIR 可选的。它的第一个参数是指向JavaVM允许与 Java 虚拟 VM 交互的结构的指针,例如垃圾收集器识别的请求内存。或者从本机代码中搜索和实例化 Java 类。
将本机库加载到 Android/Java 进程中更重要的部分是它的导出函数可供 Java 部分使用。检查 Java 类中标记为 的方法native。此类方法没有方法体,而是在调用它们时执行匹配(基于类和方法名称)的本机方法。
其它你可能感兴趣的问题