免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2020 | 回复: 6
打印 上一主题 下一主题

[Android] 请教安卓程序执行问题,进程间通迅。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-15 13:20 |只看该作者 |倒序浏览
安卓里每个进程都有一个dalvik 虚拟机。
我的问题场景是:
比如我打开了一个app (微信),这时候系统给它创建一个进程,启动一个dalvik虚拟机开始解释执行app的代码。
如果app执行了一会儿需要使用location信息。会经过binder机制,申请LocationManagerService的服务。

我的问题是,locationManagerSerivice的服务是怎么做的?在这里location服务是在自己的dalvik虚拟机里执行的吗,然后返回结果给app?
也就是说app调用的系统服务的代码都是在系统服务的进程中执行的,和app自己的dalvik虚拟机无关是吗?

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
2 [报告]
发表于 2015-03-16 13:30 |只看该作者
locationManagerSerivice 是在自己的进程空间(并不是所有的服务都是在dalvik虚拟机里执行的)执行的,让返回数据给app的
这快详情你可以看看IPC通信.IPC不仅仅是Android才有的

论坛徽章:
0
3 [报告]
发表于 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).

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
4 [报告]
发表于 2015-03-18 13:03 |只看该作者
回复 3# kimoohuang


    ClassLoad有Parent ClassLoad.你自己可以deubg看一下.里面还对应的source路径.不同版本,Classload是油区别的.
要想知道是不是自己的,最简单的是new一个Classload,parent为null,这样就只有对应加载path的calss了.

论坛徽章:
0
5 [报告]
发表于 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);
不知道是不是我打印错了。
   

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
6 [报告]
发表于 2015-03-19 09:46 |只看该作者
回复 5# kimoohuang


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

论坛徽章:
0
7 [报告]
发表于 2015-03-20 10:50 |只看该作者
回复 6# rover12421


    好的,谢谢您,很有帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP