查看binder调用信息
http://aospxref.com/android-12.0.0_r3/xref/frameworks/base/core/java/android/os/BinderProxy.java
部分APP不会使用常规的framework api调用系统的一些函数获取信息,但是如果他自己构建binder调用的信息获取,最后都会跑到这个函数中去。
关键函数transact
打印调用信息关键函数:
public boolean transact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { }
进入native层监控:
595publicnativebooleantransactNative(intcode,Parceldata,Parcelreply, 596intflags)throwsRemoteException;
对应native代码:
http://aospxref.com/android-12.0.0_r3/xref/frameworks/base/core/jni/android_util_Binder.cpp #1553
1548 static const JNINativeMethod gBinderProxyMethods[] = {
1549 /* name, signature, funcPtr */
1550 {"pingBinder", "()Z", (void*)android_os_BinderProxy_pingBinder},
1551 {"isBinderAlive", "()Z", (void*)android_os_BinderProxy_isBinderAlive},
1552 {"getInterfaceDescriptor", "()Ljava/lang/String;", (void*)android_os_BinderProxy_getInterfaceDescriptor},
1553 这里{"transactNative", "(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z", (void*)android_os_BinderProxy_transact},
1554 {"linkToDeath", "(Landroid/os/IBinder$DeathRecipient;I)V", (void*)android_os_BinderProxy_linkToDeath},
1555 {"unlinkToDeath", "(Landroid/os/IBinder$DeathRecipient;I)Z", (void*)android_os_BinderProxy_unlinkToDeath},
1556 {"getNativeFinalizer", "()J", (void*)android_os_BinderProxy_getNativeFinalizer},
1557 {"getExtension", "()Landroid/os/IBinder;", (void*)android_os_BinderProxy_getExtension},
1558 };
上面是函数绑定,具体实现是:
1382 static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj, 1383 jint code, jobject dataObj, jobject replyObj, jint flags)
发现一个好东西,把java的对象转c++中对象,也就是对象中的一些字段信息转到c++中的class中去。
Parcel* data = parcelForJavaObject(env, dataObj);
发现这里模块有log工具的
1405ALOGV("Javacodecallingtransacton%pinJavaobject%pwithcode%"PRId32"
",
1406 target,obj,code);
可以使用ALOG进行参数打印,比如binder的操作码code,和调用目标的class等等。 上面的日志工具文件:
http://aospxref.com/android-12.0.0_r3/xref/frameworks/ex/framesequence/jni/utils/log.h
如果编译user版本,log关闭的,通常为了规避检测,我们都会编译user版本的系统。
28 /* 29 * Normally we strip ALOGV (VERBOSE messages) from release builds. 30 * You can modify this (for example with "#define LOG_NDEBUG 0" 31 * at the top of your source file) to change that behavior. 32 */ 33 #ifndef LOG_NDEBUG 34 #ifdef NDEBUG 35 #define LOG_NDEBUG 1 36 #else 37 #define LOG_NDEBUG 0 38 #endif 39 #endif
LOG_NDEBUG==1表示不打印VERBOSE日志
LOG_NDEBUG==0表示打印VERBOSE日志
在这个头文件顶部,增加
#define LOG_NDEBUG 0
主动激活打印日志,或者再增加一个开关来控制是否打印,增加pid过滤也可以的。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
JAVA
+关注
关注
20文章
3005浏览量
116820 -
Framework
+关注
关注
0文章
25浏览量
9276 -
C++语言
+关注
关注
0文章
147浏览量
7769
原文标题:AOSP12中查看binder调用信息
文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
请问各位如何在CCS4.2中查看DSP/BIOS中配置的任务的状态?
如题:请问各位如何在CCS4.2中查看DSP/BIOS中配置的任务的状态,是就绪,阻塞还是运行态呢?谢谢。
发表于 07-30 08:08
如何在华为手机,平板中查看申请试用HarmonyOS 2.0版本需反馈的基本信息?
如何在华为手机,平板中查看申请试用鸿蒙HarmonyOS 2.0版本需反馈的基本信息?
发表于 05-24 16:21
如何在Probe Response帧和Beacon帧中添加指定的Vendor IE信息呢
信息,IE由ID、Length(有效载荷长度,单位为字节)和Payload构成。请问一下R329如何在WiFi Softap模式添加自定义Vendor IE?如何在Probe Response帧和Beacon帧
发表于 12-29 06:40
如何正确查看firmware版本信息呢
在解决客户问题的过程中,多数问题都是因为版本没有对齐导致的,从驱动到firmware再到etf测试工具。如何查看firmware版本信息?如何正确查看XRADIO相关版本的
发表于 12-29 07:27
openHarmony IPC数据调用的过程分享
的本地Binder对象。 };2.3 binder_transaction_data这个数据不仅包含了flat_binder_object中的纯数据,也包含的cmdID以及发送者的其他
发表于 03-30 09:26
VisionFive 2成功集成Android开源项目(AOSP)!
内核集成。
AOSP基线:赛昉致力于持续集成最新的AOSP基线,为了确保用户能够从AOSP的最新更新中获益,并不断的带来改进和增强。
支持通过Android Studio进行ABD连接
发表于 10-16 13:11
如何在IDEA中查看依赖关系
Maven提供了mvn dependency:tree来查看依赖关系,而IDE往往提供了更加便利的方式,比如Eclipse或者IDEA都有类似的功能,这篇文章简单说明一下如何在IDEA中查看
如何在同步的Rust方法中调用异步代码呢?
在同步的 Rust 方法中调用异步代码经常会导致一些问题,特别是对于不熟悉异步 Rust runtime 底层原理的初学者。
Andorid系统中binder是什么意思
binder是什么?可以理解为Andorid系统中的一种进程间通信的方式,虽然Android系统基于Linux,但是它并没有采用Linux自带的进程间通信方式,而是采用了更高效的binder,理解
Binder 驱动深度解析:Android IPC 的核心底层实现
在 Android 系统的底层架构中,Binder 是当之无愧的 IPC(跨进程通信)核心,堪称 Android 组件通信的“心脏”。从应用启动、服务调用到系统服务交互,几乎所有跨进程操作都离不开
如何在AOSP12中查看binder调用信息呢?
评论