gpt4 book ai didi

android - 在 Linux/Android 上检查从另一个共享库加载的共享库

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:08 24 4
gpt4 key购买 nike

是否可以检查调用进程从另一个共享库 (.so) 加载了哪些共享库?我知道可以使用命令行工具,但是否可以在 C++ 代码中执行此类检查?

我需要以某种方式获取由 Android 应用程序加载的 native 共享库的列表,但它似乎无法通过 Java 代码实现。

最佳答案

你可以使用 /proc/<pid>/maps文件或只是/proc/self/maps对于调用过程:以“.so”结尾的行用于链接的共享库。这是一个黑客,但应该工作。请注意,一个库可能会映射多次,因此您需要跳过重复。

好消息:您可以从 java 中完成。下面的代码 fragment 将当前进程的共享库打印到 logcat。

try {
Set<String> libs = new HashSet<String>();
String mapsFile = "/proc/self/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...
}

我的设备上的输出是:

D/Ldd     (11286): 55 libraries:
D/Ldd (11286): /system/lib/libc.so
D/Ldd (11286): /system/lib/libdbus.so
D/Ldd (11286): /system/lib/librpc.so
D/Ldd (11286): /system/lib/libEGL.so
D/Ldd (11286): /system/lib/libstagefright_color_conversion.so
D/Ldd (11286): /system/lib/libmedia.so
D/Ldd (11286): /system/lib/libemoji.so
D/Ldd (11286): /system/lib/libcrypto.so
D/Ldd (11286): /system/lib/libstagefright_avc_common.so
D/Ldd (11286): /system/lib/libnativehelper.so
D/Ldd (11286): /system/lib/libskiagl.so
D/Ldd (11286): /system/lib/libopencore_player.so
D/Ldd (11286): /system/lib/libjpeg.so
D/Ldd (11286): /system/lib/libsurfaceflinger_client.so
D/Ldd (11286): /system/lib/libstagefright.so
D/Ldd (11286): /system/lib/libdrm1.so
D/Ldd (11286): /system/lib/libdvm.so
D/Ldd (11286): /system/lib/libwebcore.so
D/Ldd (11286): /system/lib/libGLESv1_CM.so
D/Ldd (11286): /system/lib/libhardware.so
D/Ldd (11286): /system/lib/libexif.so
D/Ldd (11286): /system/lib/libgps.so
D/Ldd (11286): /system/lib/liblog.so
D/Ldd (11286): /system/lib/libexpat.so
D/Ldd (11286): /system/lib/libopencore_common.so
D/Ldd (11286): /system/lib/libbluedroid.so
D/Ldd (11286): /system/lib/libm.so
D/Ldd (11286): /system/lib/libicui18n.so
D/Ldd (11286): /system/lib/libomx_amrenc_sharedlibrary.so
D/Ldd (11286): /system/lib/libwpa_client.so
D/Ldd (11286): /system/lib/libstdc++.so
D/Ldd (11286): /system/lib/libandroid_runtime.so
D/Ldd (11286): /system/lib/libz.so
D/Ldd (11286): /system/lib/libETC1.so
D/Ldd (11286): /system/lib/libsonivox.so
D/Ldd (11286): /system/lib/libstlport.so
D/Ldd (11286): /system/lib/libutils.so
D/Ldd (11286): /system/lib/libicudata.so
D/Ldd (11286): /system/lib/libsqlite.so
D/Ldd (11286): /system/lib/libhardware_legacy.so
D/Ldd (11286): /system/lib/libpixelflinger.so
D/Ldd (11286): /system/lib/libvorbisidec.so
D/Ldd (11286): /system/lib/libstagefright_amrnb_common.so
D/Ldd (11286): /system/lib/libcutils.so
D/Ldd (11286): /system/lib/libui.so
D/Ldd (11286): /system/lib/libmedia_jni.so
D/Ldd (11286): /system/lib/libomx_sharedlibrary.so
D/Ldd (11286): /system/lib/libcamera_client.so
D/Ldd (11286): /system/lib/libskia.so
D/Ldd (11286): /system/lib/libopencore_net_support.so
D/Ldd (11286): /system/lib/libnetutils.so
D/Ldd (11286): /system/lib/libbinder.so
D/Ldd (11286): /system/lib/libssl.so
D/Ldd (11286): /system/lib/libicuuc.so
D/Ldd (11286): /system/lib/libGLESv2.so

如果需要,也可以通过android.os.Process.myPid() 获得pid .

关于android - 在 Linux/Android 上检查从另一个共享库加载的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8744316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com