scache

Hook Transact方法监控IPC流量

♀尐吖头ヾ 提交于 2020-04-14 14:25:26
【推荐阅读】微服务还能火多久?>>> 背景 Binder数据传输是有大小限制的。 oneway方式。手写MMAP初始化Binder服务(4M/2),ProcessState初始化BInder服务(1M-8K)/2。 非oneway方式。手写MMAP初始化Binder服务(4M),ProcessState初始化BInder服务(1M-8K)。 而且BInder的线程池默认是15个,15个线程共享这1MB-8KB的内存空间,所以实际传输大小会更加小。当数据传输达到限制的时候,就会抛出TransactionTooLargeException异常。 为了更加好的预防排查定位问题,我们可以hook transact方法监控整个APP的IPC流量。 方案 这里hook的是系统的Service,我们自己生成的Service也可以用这种思想实现。不过注意的是。API28开始asInterface方法,被定义为黑名单接口,所以这个方案只能在TargetSdk28以下使用,omg。 private fun hookService ( context : Context , serviceName : String , interfaceName : String ) : Any { val serviceManager = Class . forName ( "android.os