安卓blocker使用说明android hook技术

thelinktodeath methodcanbeusedtoregisteraibinder.deathrecipientwiththeibinder,whichwillbecalledwhenitscontaingprocessiesion

这意味着我们可以在系统服务中申请某个服务的Binder,然后调用此IBinder的linkToDeath函数进行注册。 可以注册IBinder.DeathRecipient类型的对象。 其中IBinder.DeathRecipient是在IBinder类中定义的嵌入类。

publicabstractvoidlinktodeath I binder.deathrecipientrecipient,int flags )。

registertherecipientforanotificationifthisbindergoesaway.ifthisbinderobjectunexpectedlygoesaway typicallybecauseitseitshoshosting thenthegivenibinder.death recipient ‘ sdeathrecipient.binder died ) ) method will be called。

youwillonlyreceivedeathnotificationsforremotebinders,aslocalbindersbydefinitioncan ‘ tdiewithoutyoudyingaswell。

如果与该IBinder对应的Service进程异常终止,例如丢失到kill,则系统将调用该IBinder以前在linkToDeath中注册的DeathRecipient类对象的binderDied函数。

在典型实现中,Bp端用于注册linkToDeath并监听绑定服务的异常终止,而典型的binderDied函数实现用于释放相关资源。

publicabstractbooleanunlinktodeath I binder.deathrecipientrecipient,int flags )。

removeapreviouslyregistereddeathnotification.therecipientwillnolongerbecalledifthisobjectdies。

在服务器端在我编写的程序中,服务器端一直是在系统上运行的服务)实现DeathHandler,并在APP应用程序部分调用通告程序notifyprocessdiednewbinder ) ),如下所示

附带服务器端的DeathHandler实现。

publicbooleannotifyprocessdied ibindercb ) {

myservicedeathhandlerdeathhandler=newmyservicedeathhandler CB;

try {

CB.linktodeathdeathHandler,0 );

}catchremoteexceptione ) {

返回假;

}

返回真;

}

privateclassmyservicedeathhandlerimplementsibinder.death recipient {

私有I binder MCB;

publicmyservicedeathhhandler ibindercb ) {

mCb=Cb;

}

@Override

公共语音绑定器died

//releaseresourcewhenhostprocessdied。

}

公共I binder get binder

返回MCB;

}

}

关于使用unlinkToDeath )方法,这里没有具体的可以参考AudioManager和audio服务实现的示例。

其中,音频服务是服务器端,每个程序都有音频管理器,音频管理器是客户端端。

当APP应用程序进程被杀死时,AudioService需要释放一些资源。 所以,我们使用IBinder的链接到深度机制释放了一些资源。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注