2

使用 Android NDK 是否可以(从本机 C 代码)获取已加载的 .so 库列表?我正在寻找 iOS 函数 _dyld_image_count()/_dyld_get_image_name() 的 Android 版本。

也可以获得包含特定函数的 .so 的库名称(在 iOS 上,此函数是 dladdr())。

4

2 回答 2

1

您可以读取和解析/proc/self/maps文件。它包含为您的应用程序加载的每个共享对象的地址。self将帮助您的应用程序读取自己的信息。

在 Android NDK 中也可用的nm命令行实用程序可以向您显示某些共享对象文件中可用的符号。您可以查看它是如何实现的并尝试使用相同的库,但这并非易事。

于 2012-12-21T13:19:30.480 回答
1

是的,你可以得到这个这里是样本

try {

 Set<String> libs = new HashSet<String>();

 String mapsFile = "/proc/" + android.os.Process.myPid() + "/maps";

  BufferedReader reader = new BufferedReader(new 

FileReader(mapsFile));

        String line;

        while ((line = reader.readLine()) != null) {

            if (line.endsWith(".so")) {

                int n = line.lastIndexOf(" ");

                libs.add(line.substring(n + 1));

            }

        }

        Log.d("Ldd", libs.size() + " libraries:");

        for (String lib : libs) {

            Log.d("Ldd", lib);

        }

    } catch (FileNotFoundException e) {

        // Do some error handling...

    } catch (IOException e) {

        // Do some error handling...

    }

试试这个这可能对你有帮助

于 2012-12-21T13:03:22.823 回答