0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在AOSP12中查看binder调用信息呢?

哆啦安全 来源:黄大官AOSP 2023-11-27 09:40 次阅读

查看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
    +关注

    关注

    19

    文章

    2956

    浏览量

    104531
  • Framework
    +关注

    关注

    0

    文章

    24

    浏览量

    8568
  • C++语言
    +关注

    关注

    0

    文章

    147

    浏览量

    6968

原文标题:AOSP12中查看binder调用信息

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何查看及更改函数/函数块的调用环境

    是循环执行,当一个功能块被多个外部函数/函数块调用时,我们应如何查看某一次调用时的内部变量?这涉及到函数块的调用环境问题,今天这篇文章,我
    的头像 发表于 11-17 09:08 880次阅读
    如何<b class='flag-5'>查看</b>及更改函数/函数块的<b class='flag-5'>调用</b>环境

    何在labview调用Matlab程序

    大家好!我是新手,想问下如何在labview调用Matlab程序?谢谢
    发表于 05-05 17:10

    怎样查看labview调用的库函数的来源等信息

    怎样查看labview调用的库函数的来源等信息?再看程序时碰到一个可函数调用节点,不知道怎样怎样添加的它,也不知道他的作用(它的输入是个数组,貌似是找这个数组的指针的),求助~
    发表于 12-27 10:57

    请问各位如何在CCS4.2查看DSP/BIOS配置的任务的状态?

    如题:请问各位如何在CCS4.2查看DSP/BIOS配置的任务的状态,是就绪,阻塞还是运行态?谢谢。
    发表于 07-30 08:08

    请问如何使用execl调用shell命令查看文件信息

    如何使用execl调用shell命令查看文件信息
    发表于 04-09 06:37

    何在华为手机,平板查看申请试用HarmonyOS 2.0版本需反馈的基本信息

    何在华为手机,平板查看申请试用鸿蒙HarmonyOS 2.0版本需反馈的基本信息
    发表于 05-24 16:21

    何在stm32使用printf函数打印串口信息

    为什么在中断中使用printf函数会导致中断异常?如何在stm32使用printf函数打印串口信息
    发表于 12-01 07:37

    何在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

    何在STM32CubeMonitor查看/显示变量表

    何在 STM32CubeMonitor 查看/显示变量表,就像在 STM Studio 中一样?
    发表于 12-07 07:35

    何在keil调试模式下查看FreeRTOS消息队列的情况

    何在keil调试模式下查看FreeRTOS消息队列的情况
    发表于 05-05 10:18

    何在IDEA查看依赖关系

    Maven提供了mvn dependency:tree来查看依赖关系,而IDE往往提供了更加便利的方式,比如Eclipse或者IDEA都有类似的功能,这篇文章简单说明一下如何在IDEA查看
    的头像 发表于 10-17 09:48 1.9w次阅读

    何在同步的Rust方法调用异步代码

    在同步的 Rust 方法调用异步代码经常会导致一些问题,特别是对于不熟悉异步 Rust runtime 底层原理的初学者。
    的头像 发表于 03-17 09:18 2054次阅读

    Andorid系统binder是什么意思

    binder是什么?可以理解为Andorid系统的一种进程间通信的方式,虽然Android系统基于Linux,但是它并没有采用Linux自带的进程间通信方式,而是采用了更高效的binder,理解
    的头像 发表于 10-07 15:13 661次阅读
    Andorid系统<b class='flag-5'>中</b><b class='flag-5'>binder</b>是什么意思