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