上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 191 下一页
摘要: --************************************-- db_block_checking 与 db_block_checksum--************************************ db_block_checking与db_block_checksum两个参数都是对block进行检查,然而两者很容易混淆。事实上,两个参数中前者是对块做逻辑性检查,后者则是做物理性检查。两者各司其职,并不矛盾。下面分别给出具体描述。1.db_block_checking db_block_checking 是当block发生任何变化的时候进行逻辑上的完整性和正确 阅读全文
posted @ 2011-07-23 22:40 ajuanabc 阅读(265) 评论(0) 推荐(0) 编辑
摘要: map_off字段 这个字段主要保存map开始位置,就是从文件头开始到map出现的数据长度,通过这个索引就可以找到map数据。那么map保存些什么数据呢?有什么作用呢?下面就来解决这两个问题,首先来分析map的数据结构:名称大小说明size4字节map里项的个数list变长每一项定义为12字节,项的个数由上面项大小决定。每一个map项的结构定义如下:/**Direct-mapped "map_item".*/typedefstruct DexMapItem {u2 type; /* type code (seekDexType* above) */u2 unused;u4 阅读全文
posted @ 2011-07-23 18:23 ajuanabc 阅读(187) 评论(0) 推荐(0) 编辑
摘要: B3log 的文章同步不过来了。伤心啊。。。以后这里就不再发布文章了,文章就都发布到 Vanessa 上,但我还会时不时的登录下,看下这里的好友。 阅读全文
posted @ 2011-07-22 14:25 ajuanabc 阅读(96) 评论(0) 推荐(0) 编辑
摘要: SHA-1签名字段 从dex文件头里,已经看到前面有一个4字节的字段检验码了,那为什么又需要一个SHA-1签名字段呢? 这不是重复了吗?起初始看来,好像是有点重复,可是仔细考虑一下,这样设计,还是比较高明的。因为dex文件的大小,一般都不是很小,简单的应用程序都有几十K大小,这么多数据使用一个4字节的检验码,重复的机率还是有的,也就是说当文件里的数据修改了,还是检验不出来。那么这时,检验码就失去了作用,需要使用更加强大的检验码,这就是SHA-1,它是20个字节,比前面的检验码多了16个字节,理论上就强大了很多,几乎不会不同的文件计算出来的检验是一样的了。设计两个检验码的目的,就是先使用第一个. 阅读全文
posted @ 2011-07-17 19:11 ajuanabc 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 魔数字段,主要就是Dex文件的标识符,它占用4个字节,在目前的源码里是 “dex\n”,它的作用是用来区别其它文件的,比如有一个文件也叫Dex结尾的文件,就可以认为它是Davlik虚拟机运行的文件吗?当然不行,因此这四个字节,就起到与别的结尾也是Dex文件的区分。还有Davlik虚拟机也有优化的Dex,也是通过个字段来区分的,当它是优化的Dex文件时,它的值就变成”dey\n”了。根据这四个字节,就可以识别不同类型的Dex文件了。到这里,已经搞清楚什么是魔数的作用了。版本字段,主要用来标识Dex文件的版本。目前支持的版本号为“035\0”,不管是否优化的版本,都是使用这个版本号。检验码字段,主 阅读全文
posted @ 2011-07-16 23:57 ajuanabc 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 在android系统里,通过复杂的编译过程,会把java源代码生成dex文件,然后在虚拟机里就会加载这个文件运行。那么这个文件的格式是什么样的呢?为什么android不直接使用class文件,而采用这个不一样文件呢?其实它是针对嵌入式系统优化的结果,比如dex文件采用的指令码,并不是java的标准虚拟机指令,而是自己独立成一套。如果有自己的编译系统,可以不生成class文件,直接生成dex文件。还有dex文件是共用很多类名称、常量字符串,导致它的体积比较小,运行效率比较高。归根到底,就是它采用了基于寄存器的虚拟机实现。接着来分析Dex的文件头,如下:偏移大小说明magic8魔数占4个字节,版本 阅读全文
posted @ 2011-07-15 23:18 ajuanabc 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 演示地址:http://www.corange.cn/demo/3778/index.html截图效果代码请直接到演示位置查看源码 原文地址:http://www.corange.cn/archives/2011/06/3778.html 阅读全文
posted @ 2011-07-14 10:37 ajuanabc 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 在分析Dalvik虚拟机运行之前,先要了解Davlik指令,但是了解Davlik指令之前又要先懂得指令的格式,才能看得懂指令是怎么样构成,怎么样表达,怎么样查看,下面就来仔细地学习指令格式,这样在代码里看到指令时,就会很自然而然知道这条指令是干什么用了。在Dalvik虚拟机的目录下面有这样一份文档,我们来仔细学习它,如下:本文描述了在Dalvik虚拟机里字节码的指令格式,这种指令格式是使用在另一个文档《指令字节码参考》文档里。指令的位描述下表第一列里说明了每个指令位的布局情况,每16位的字采用空格分隔开来,每个字母表示四位,每个字母按顺序从高节开始,排列到低字节。每四位之间可能使用竖线(|)来 阅读全文
posted @ 2011-07-10 10:00 ajuanabc 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 从上一节里,我们学习到JNI的方法表示可知,GetStaticMethodID方法最后一个参数“([Ljava/lang/String;)V”。这个参数是一个字符串,但内容排列比较奇怪,其实它是一种对函数返回值和参数的编码。这种编码叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。这里只是方法描述符,但也有类描述符。其实这串参数“([Ljava/lang/String;)V”具体是表示什么意思呢?怎么样来理解它呢?那么就需要学习这一节了,其实这串字符串就是描述像下面的函数:publicstatic void main(String argv[] 阅读全文
posted @ 2011-07-02 23:02 ajuanabc 阅读(202) 评论(0) 推荐(0) 编辑
摘要: <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->从上一节可以知道Dalvik虚拟机入口点和创建虚拟机的函数,这一节继续分析运行时类调用虚拟机的代码片段,需要搞清楚怎么样运行JAVA的ZygoteInit类,Dalvik虚拟机又提供什么样的接口调用。运行时类代码如下:/*start the virtual machine */ if (startVm(&mJavaVM, &env) != 0) goto bail;这一段是创建虚拟机,并准备好所有运行dex代码的环境。 /* * Regist... 阅读全文
posted @ 2011-06-27 21:43 ajuanabc 阅读(236) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 191 下一页