Chinaunix

标题: 请教安卓程序执行问题,进程间通迅。 [打印本页]

作者: kimoohuang    时间: 2015-03-15 13:20
标题: 请教安卓程序执行问题,进程间通迅。
安卓里每个进程都有一个dalvik 虚拟机。
我的问题场景是:
比如我打开了一个app (微信),这时候系统给它创建一个进程,启动一个dalvik虚拟机开始解释执行app的代码。
如果app执行了一会儿需要使用location信息。会经过binder机制,申请LocationManagerService的服务。

我的问题是,locationManagerSerivice的服务是怎么做的?在这里location服务是在自己的dalvik虚拟机里执行的吗,然后返回结果给app?
也就是说app调用的系统服务的代码都是在系统服务的进程中执行的,和app自己的dalvik虚拟机无关是吗?
作者: rover12421    时间: 2015-03-16 13:30
locationManagerSerivice 是在自己的进程空间(并不是所有的服务都是在dalvik虚拟机里执行的)执行的,让返回数据给app的
这快详情你可以看看IPC通信.IPC不仅仅是Android才有的
作者: kimoohuang    时间: 2015-03-16 17:22
回复 2# rover12421


        多谢。
    请问一下在dalvik虚拟机里区分APP本身的function和app调用系统API的function该怎么做。我尝试打出classloader,但是如果可以打印出来的都是Pathclassloader,好像给不出什么信息。、

     URL: developer.android.com/reference/dalvik/system/PathClassLoader.html  这里说
     Android uses this class for its system class loader and for its application class loader(s).
作者: rover12421    时间: 2015-03-18 13:03
回复 3# kimoohuang


    ClassLoad有Parent ClassLoad.你自己可以deubg看一下.里面还对应的source路径.不同版本,Classload是油区别的.
要想知道是不是自己的,最简单的是new一个Classload,parent为null,这样就只有对应加载path的calss了.
作者: kimoohuang    时间: 2015-03-18 13:55
回复 4# rover12421

谢谢您的回复,我的开发主要是扩展dalvik虚拟机的代码。区分app自己的func和system API的func,主要想跟踪app调用了那些系统API,看看有没有做恶意的事情的。

我是在dalvik/vm/mterp/out/InterpC-portable.cpp 的void dvmInterpretPortable(Thread* self) 函数里添加的代码。
ALOGD("ClassLoader:%s", methodToCall->clazz->classLoader->clazz->descriptor);
不知道是不是我打印错了。
   
作者: rover12421    时间: 2015-03-19 09:46
回复 5# kimoohuang


    这块代码不了解.照你的目的.其实可以修改patchClassLoad,加载类的时候都有findclass这一步,你只要在这里添加代码就行了,findclass默然是先从父类查找,父类找不到再从当前找,简单的判断就是所有从最低级别的查找到的class都是用户的,当然这个不严谨,最好是判定当前findclass同级的classload的path是不是系统dex,如果不是就可以判定是用户app的.
作者: kimoohuang    时间: 2015-03-20 10:50
回复 6# rover12421


    好的,谢谢您,很有帮助!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2