查看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文章
3001瀏覽量
116422 -
Framework
+關注
關注
0文章
25瀏覽量
9262 -
C++語言
+關注
關注
0文章
147瀏覽量
7682
原文標題: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,理解
如何在AOSP12中查看binder調用信息呢?
評論