使用Android NDK是否可以(从本机C代码)获取已加载的.so库列表?我正在寻找Android版本的iOS函数_dyld_image_count()/ _ dyld_get_image_name()。
还可以获取包含特定函数的.so的库名称(在iOS上,此函数是dladdr())。
答案 0 :(得分: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...
}
试试这个可能会帮助你
答案 1 :(得分:1)
您可以阅读并解析/proc/self/maps
文件。它包含为应用程序加载的每个共享对象的地址。 self
将帮助您的应用程序阅读自己的信息。
nm命令行utiliy可以显示某些共享对象文件中可用的符号。您可以查看它是如何实现的,并尝试使用相同的库,但这不会是微不足道的。