Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Error: unable to find module 'libc.so'

未关闭
#372 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
52/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
java, javascript
领域
devtools

调研方向

从 lib/class-model.js 中的 getArtClassSpec() 和 lib/android.js 中的 Android 版本处理开始,比较所引用的修订版本。使用 Java 11 WaitForKey 示例进行复现:通过 Frida 进行附加并运行 Java.enumerateClassLoadersSync()。当非 Android JVM 不再因 libc.so 错误而失败,并且能够枚举类加载器时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

Running Java.enumerateClassLoadersSync() while attached to a JVM application results in the following error:

Error: unable to find module 'libc.so'
    at value (/frida/runtime/core.js:315)
    at Xe (/frida/bridges/java.js:1)
    at <anonymous> (/frida/bridges/java.js:1)
    at <anonymous> (/frida/bridges/java.js:1)
    at Ge (/frida/bridges/java.js:1)
    at <anonymous> (/frida/bridges/java.js:1)
    at <anonymous> (/frida/bridges/java.js:1)
    at Be (/frida/bridges/java.js:1)
    at <anonymous> (/frida/bridges/java.js:1)
    at On (/frida/bridges/java.js:1)
    at build (/frida/bridges/java.js:1)
    at _make (/frida/bridges/java.js:8)
    at use (/frida/bridges/java.js:8)
    at _chooseObjectsJvm (/frida/bridges/java.js:8)
    at choose (/frida/bridges/java.js:8)
    at choose (/frida/bridges/java.js:8)
    at _enumerateClassLoadersJvm (/frida/bridges/java.js:8)
    at enumerateClassLoaders (/frida/bridges/java.js:8)
    at enumerateClassLoadersSync (/frida/bridges/java.js:8)
    at <eval> (<input>:1)

I believe this is caused by the getArtClassSpec() call here:

https://github.com/frida/frida-java-bridge/blob/9bf86b718ab3e9d50d9333dba1f26e8f7aad852b/lib/class-model.js#L1305-L1307

Before 534d8d0f3ddaa90cc4d11a8cdb6444f480f8f342 (v7.0.5) getArtClassSpec() would optimistically try to get Android version and return early on any error:

https://github.com/frida/frida-java-bridge/blob/27a9a6f02774050de8e49285c58f458aef291700/lib/android.js#L958-L964

v7.0.5 had the line moved to getArtFieldSpec() while removing catch block. Now as I read it when Frida attempts to determine Android version on a non-Android JVM app (trying to load libc.so which doesn't exist on e.g. Ubuntu/Debian) the above error is no longer ignored, preventing correct operation such as enumerating Java class loaders.

https://github.com/frida/frida-java-bridge/blob/534d8d0f3ddaa90cc4d11a8cdb6444f480f8f342/lib/android.js#L1154-L1157

How to reproduce

Compile and run this sample Java progam (use Java 11 Temurin build as recommended here):

// WaitForKey.java
import java.io.IOException;

public class WaitForKey {
    public static void main(String[] args) throws IOException {
        System.out.println("Press any key to exit...");
        System.in.read();
        System.out.println("Exiting.");
    }
}
jdk-11.0.28+6/bin/javac WaitForKey.java
jdk-11.0.28+6/bin/java WaitForKey

Then in another shell attach with Frida:

frida -n java

and attempt to enumerate class loaders:

Java.enumerateClassLoadersSync()

Workaround

In my case downgrading to the following versions worked:

pip install frida==17.2.11 frida-tools==14.4.1
主要语言
JavaScript
星标
414
派生
174
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

frida/frida-java-bridge 的其他 Issue

查看 frida/frida-java-bridge 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。