0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在AOSP12中查看binder調(diào)用信息呢?

哆啦安全 ? 來(lái)源:黃大官AOSP ? 2023-11-27 09:40 ? 次閱讀

查看binder調(diào)用信息

http://aospxref.com/android-12.0.0_r3/xref/frameworks/base/core/java/android/os/BinderProxy.java

部分APP不會(huì)使用常規(guī)的framework api調(diào)用系統(tǒng)的一些函數(shù)獲取信息,但是如果他自己構(gòu)建binder調(diào)用的信息獲取,最后都會(huì)跑到這個(gè)函數(shù)中去。

關(guān)鍵函數(shù)transact

打印調(diào)用信息關(guān)鍵函數(shù):

public boolean transact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {


}

進(jìn)入native層監(jiān)控:

595publicnativebooleantransactNative(intcode,Parceldata,Parcelreply,
596intflags)throwsRemoteException;

對(duì)應(yīng)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  };

上面是函數(shù)綁定,具體實(shí)現(xiàn)是:

1382  static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,
1383          jint code, jobject dataObj, jobject replyObj, jint flags)

發(fā)現(xiàn)一個(gè)好東西,把java的對(duì)象轉(zhuǎn)c++中對(duì)象,也就是對(duì)象中的一些字段信息轉(zhuǎn)到c++中的class中去。

Parcel* data = parcelForJavaObject(env, dataObj);

發(fā)現(xiàn)這里模塊有l(wèi)og工具的

1405ALOGV("Javacodecallingtransacton%pinJavaobject%pwithcode%"PRId32"
",
1406  target,obj,code);
可以使用ALOG進(jìn)行參數(shù)打印,比如binder的操作碼code,和調(diào)用目標(biāo)的class等等。 上面的日志工具文件:
http://aospxref.com/android-12.0.0_r3/xref/frameworks/ex/framesequence/jni/utils/log.h

如果編譯user版本,log關(guān)閉的,通常為了規(guī)避檢測(cè),我們都會(huì)編譯user版本的系統(tǒng)。

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日志

在這個(gè)頭文件頂部,增加

#define LOG_NDEBUG 0

主動(dòng)激活打印日志,或者再增加一個(gè)開(kāi)關(guān)來(lái)控制是否打印,增加pid過(guò)濾也可以的。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2952

    瀏覽量

    104489
  • Framework
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8566
  • C++語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    6951

原文標(biāo)題:AOSP12中查看binder調(diào)用信息

文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何查看及更改函數(shù)/函數(shù)塊的調(diào)用環(huán)境

    是循環(huán)執(zhí)行,當(dāng)一個(gè)功能塊被多個(gè)外部函數(shù)/函數(shù)塊調(diào)用時(shí),我們應(yīng)如何查看某一次調(diào)用時(shí)的內(nèi)部變量?這涉及到函數(shù)塊的調(diào)用環(huán)境問(wèn)題,今天這篇文章,我
    的頭像 發(fā)表于 11-17 09:08 ?839次閱讀
    如何<b class='flag-5'>查看</b>及更改函數(shù)/函數(shù)塊的<b class='flag-5'>調(diào)用</b>環(huán)境

    何在labview調(diào)用Matlab程序

    大家好!我是新手,想問(wèn)下如何在labview調(diào)用Matlab程序?謝謝
    發(fā)表于 05-05 17:10

    怎樣查看labview調(diào)用的庫(kù)函數(shù)的來(lái)源等信息?

    怎樣查看labview調(diào)用的庫(kù)函數(shù)的來(lái)源等信息?再看程序時(shí)碰到一個(gè)可函數(shù)調(diào)用節(jié)點(diǎn),不知道怎樣怎樣添加的它,也不知道他的作用(它的輸入是個(gè)數(shù)組,貌似是找這個(gè)數(shù)組的指針的),求助~
    發(fā)表于 12-27 10:57

    請(qǐng)問(wèn)各位如何在CCS4.2查看DSP/BIOS配置的任務(wù)的狀態(tài)?

    如題:請(qǐng)問(wèn)各位如何在CCS4.2查看DSP/BIOS配置的任務(wù)的狀態(tài),是就緒,阻塞還是運(yùn)行態(tài)?謝謝。
    發(fā)表于 07-30 08:08

    請(qǐng)問(wèn)如何使用execl調(diào)用shell命令查看文件信息

    如何使用execl調(diào)用shell命令查看文件信息?
    發(fā)表于 04-09 06:37

    何在華為手機(jī),平板查看申請(qǐng)?jiān)囉肏armonyOS 2.0版本需反饋的基本信息?

    何在華為手機(jī),平板查看申請(qǐng)?jiān)囉螟櫭蒆armonyOS 2.0版本需反饋的基本信息?
    發(fā)表于 05-24 16:21

    何在stm32使用printf函數(shù)打印串口信息

    為什么在中斷中使用printf函數(shù)會(huì)導(dǎo)致中斷異常?如何在stm32使用printf函數(shù)打印串口信息?
    發(fā)表于 12-01 07:37

    何在Probe Response幀和Beacon幀添加指定的Vendor IE信息

    信息,IE由ID、Length(有效載荷長(zhǎng)度,單位為字節(jié))和Payload構(gòu)成。請(qǐng)問(wèn)一下R329如何在WiFi Softap模式添加自定義Vendor IE?如何在Probe Response幀和Beacon幀
    發(fā)表于 12-29 06:40

    如何正確查看firmware版本信息

    在解決客戶問(wèn)題的過(guò)程,多數(shù)問(wèn)題都是因?yàn)榘姹緵](méi)有對(duì)齊導(dǎo)致的,從驅(qū)動(dòng)到firmware再到etf測(cè)試工具。如何查看firmware版本信息?如何正確查看XRADIO相關(guān)版本的
    發(fā)表于 12-29 07:27

    openHarmony IPC數(shù)據(jù)調(diào)用的過(guò)程分享

    的本地Binder對(duì)象。 };2.3 binder_transaction_data這個(gè)數(shù)據(jù)不僅包含了flat_binder_object的純數(shù)據(jù),也包含的cmdID以及發(fā)送者的其他
    發(fā)表于 03-30 09:26

    何在STM32CubeMonitor查看/顯示變量表

    何在 STM32CubeMonitor 查看/顯示變量表,就像在 STM Studio 中一樣?
    發(fā)表于 12-07 07:35

    何在keil調(diào)試模式下查看FreeRTOS消息隊(duì)列的情況?

    何在keil調(diào)試模式下查看FreeRTOS消息隊(duì)列的情況?
    發(fā)表于 05-05 10:18

    何在IDEA查看依賴(lài)關(guān)系

    Maven提供了mvn dependency:tree來(lái)查看依賴(lài)關(guān)系,而IDE往往提供了更加便利的方式,比如Eclipse或者IDEA都有類(lèi)似的功能,這篇文章簡(jiǎn)單說(shuō)明一下如何在IDEA查看
    的頭像 發(fā)表于 10-17 09:48 ?1.9w次閱讀

    何在同步的Rust方法調(diào)用異步代碼?

    在同步的 Rust 方法調(diào)用異步代碼經(jīng)常會(huì)導(dǎo)致一些問(wèn)題,特別是對(duì)于不熟悉異步 Rust runtime 底層原理的初學(xué)者。
    的頭像 發(fā)表于 03-17 09:18 ?2035次閱讀

    Andorid系統(tǒng)binder是什么意思

    binder是什么?可以理解為Andorid系統(tǒng)的一種進(jìn)程間通信的方式,雖然Android系統(tǒng)基于Linux,但是它并沒(méi)有采用Linux自帶的進(jìn)程間通信方式,而是采用了更高效的binder,理解
    的頭像 發(fā)表于 10-07 15:13 ?650次閱讀
    Andorid系統(tǒng)<b class='flag-5'>中</b><b class='flag-5'>binder</b>是什么意思