在 Android 中dev/binder
也用于负责的图层通信。是否可以收听消息?我知道它们必须被解码,但我怎么能得到这些消息。例如,如果应用程序发送消息成为地理位置。我也在我的Android设备上root。
答案 0 :(得分:5)
简短:不,即使是root,也不可能。
网上没有太多关于Binder的信息,但有一些,特别是关于安全性。请参阅this或to point 3.8 here。您还可以阅读内核驱动程序的源代码和openbinder的源代码。
答案 1 :(得分:3)
您可以解码使用此版本的strace过去的大部分Binder交易:https://github.com/adetaylor/strace-android/tree/android
它具有解码ioctl
调用的增强功能,这些调用是进程向Binder内核驱动程序发出请求的方式。确保使用android
分支,否则您将无法获得这些更改的好处。
您应该能够使用NDK独立工具链来构建它。请参阅Android NDK文档中的docs/STANDALONE-TOOLCHAIN.html
。
答案 2 :(得分:3)
为什么,一次又一次,错误的答案被批准为正确?
Jtrace - 不要与bin dump混淆 - 不需要修改Android。它可以窥探活页夹消息 - 限制你必须jtrace其中一个端点。
Bindump使用debugfs,但只显示端点。 @Adrian - 我担心你得错了。
Jtrace捕获进出的sys调用 - 然后通过检查进程内存来解析绑定器消息(使用ptrace(2))。如果您的内核中有ptrace(2)(因为调试服务器愚蠢地需要它),并且您是root用户,则可以窥探消息。再次 - 你必须在一个端点上。
和@Luminger - 虽然他的主题 - 只是因为找不到信息,并不意味着没有信息。在NewAndroidBook.com上有关于Binder的大量信息 - 除了本书之外,还可以看看Binder演示链接。
答案 3 :(得分:2)
如果您正在安装自定义内核,则绑定程序驱动程序代码(drivers/staging/android/binder.c
)具有非常好的调试功能,包括条件消息和可以打印活页夹事务的函数等。
具体来说,您可以通过使用以下枚举器的适当组合设置binder_debug_mask
来获取内核日志中的各种调试消息:
BINDER_DEBUG_USER_ERROR
BINDER_DEBUG_FAILED_TRANSACTION
BINDER_DEBUG_DEAD_TRANSACTION
BINDER_DEBUG_OPEN_CLOSE
BINDER_DEBUG_DEAD_BINDER
BINDER_DEBUG_DEATH_NOTIFICATION
BINDER_DEBUG_READ_WRITE
BINDER_DEBUG_USER_REFS
BINDER_DEBUG_THREADS
BINDER_DEBUG_TRANSACTION
BINDER_DEBUG_TRANSACTION_COMPLETE
BINDER_DEBUG_FREE_BUFFER
BINDER_DEBUG_INTERNAL_REFS
BINDER_DEBUG_BUFFER_ALLOC
BINDER_DEBUG_PRIORITY_CAP
BINDER_DEBUG_BUFFER_ALLOC_ASYNC
您还可以在代码中的战略位置撒出print_binder_*
中包含的一些binder.c
函数。例如,print_binder_buffer()
或print_binder_transaction()
。您可能希望根据特定的uid或pid制作这些条件,因为否则会有很多东西在日志中飞行。
答案 4 :(得分:2)
@Adrian,一些好的工作,其他开发人员/研究人员已经解决了这个问题,所以你可以利用他们的结果。
首先,我建议您查看 Jonathan Levin (又名Technologeeks)的精彩作品,即他关于 Android 最近成为免费的内部人员可以在本书的配套网站上访问:newandroidbook.com。从那里,您将获得
的链接,描述和用法示例这是
service
命令的简单衍生物,它获取所选系统服务的句柄,然后在/sys/kernel/debug/binder/proc
目录中检查自己的条目。由于所有活页夹调试数据都是全局可读的,因此您也可以在无根设备上运行此工具。
strace
的增强版,其优于strace
的优势之一是
活页夹消息解析(自动检测到)。
Opersys(与 Karim Yaghmour 一起完成的另一项伟大工作,绝对值得注意和看待
此工具可用作应用程序,或与 HTML GUI一起用于实时显示连接的图形视图。