首页 文章 精选 留言 我的

精选列表

搜索[权限与责任],共10000篇文章
优秀的个人博客,低调大师

《Android的设计与实现:卷I》——第2章 2.3 JNI总管:JNIEnv

2.3 JNI总管:JNIEnv 在Log系统的实例中,JNI层实现方法和注册方法中都使用了JNIEnv这个指针,通过它调用JNI函数,访问Java虚拟机,进而操作Java对象。JNIEnv是JNI编程中最重要的概念,本节将详细介绍它。首先看JNIEnv的体系结构,如图2-2所示。 在图2-2中可以看到,JNIEnv首先指向一个线程相关的结构,该结构又指向一个指针数组,在这个指针数组中的每个元素最终指向一个JNI函数。所以可以通过JNIEnv去调用JNI函数。 打开jni.h文件看看这部分内容是如何设计的。由于不同平台上有不同的jni.h文件,只需要取一个加以分析,这里打开libnativehelper/include/nativehelper/jni.h。 在jni.h中,为了兼容C和C++两种代码,使用宏__cplusplus加以区分。首先看JNIEnv在文件中是如何定义的: 这里仅仅是用typedef关键字做了类型定义。那么_JNIEnv和JNINativeInterface又是什么类型呢?_JNIEnv结构体的源码如下: 以上是对 const struct JNINativeInterface类型的包装,并间接调用了const struct JNINativeInterface 上定义的方法。继续分析JNINativeInterface 的定义,代码如下:struct JNINativeInterface { …… jclass (FindClass)(JNIEnv, const char); jint (ThrowNew)(JNIEnv , jclass, const char ); …… 这里才真正涉及JNI函数的调用。当然,这里也只是个接口,具体的实现要参考虚拟机实现。 最终可以得到如下结论: C++中:JNIEnv就是struct _JNIEnv。 JNIEnv env等价于struct _JNIEnvenv,在调用JNI函数的时候,只需要env-> FindClass(JNIEnv, const char),就会间接调用JNINativeInterface结构体里定义的函数指针,而无需首先对env解引用。 C中:JNIEnv就是const struct JNINativeInterface。JNIEnv env实际等价于const struct JNINativeInterface? env,因此要得到JNINativeInterface结构体内的函数指针就必须先对env解引用得到(env),即const struct JNINativeInterface,这个指针才是真正指向JNINativeInterface结构体的指针,然后再通过它调用具体的JNI函数。因此需要这样调用:(env)-> FindClass(JNIEnv, const char)。 注意 JNIEnv只在当前线程中有效。本地方法不能将JNIEnv从一个线程传递到另一个线程中。相同的 Java 线程中对本地方法多次调用时,传递给该本地方法的JNIEnv是相同的。但是,一个本地方法可被不同的 Java 线程所调用,因此可以接受不同的 JNIEnv。

优秀的个人博客,低调大师

《iOS取证实战:调查、分析与移动安全》一3.4 数据存储方式

3.4 数据存储方式 iPhone上的数据以很多方式进行存储。下面的小节涵盖了每一个数据存储的形式以供审查者了解潜在的证据如何定位或恢复。 内部存储; SQLite 数据库文件; 属性列表; 网络; 其他。 3.4.1 内部存储 大多数的码分多址(CDMA)设备都有SD卡插槽,但是iPhone不一样,它没有任何形式的外部存储器(除了SIM卡之外)。iPhone中所有的数据都存储在内部NAND闪存中。本章后面的3.7.3节中提到的slice 2(或者称为rdisk0s2)存储了这些用户数据文件,设备的物理获取方法就是映像这部分数据。下面列出了此区域所存储的用户数据的顶层文件和目录。第6章的大部分内容集中在这些主要的目录和文件系统的其他部分。 由于所有的数据都被存储在设备内部,用从设备中获取已分配和未分配数据的方式来映像iPhone,在审查调

优秀的个人博客,低调大师

《 嵌入式系统设计与实践》一一第2章 创建系统架构

**第2章 创建系统架构**即使是小型嵌入式系统也有很多细节部分,在哪里可以应用模式?这有一定的困难。这需要我们对整个系统有个比较好的了解,如哪些部分有直接的解决方案,哪些部分包含隐藏的依赖关系等。优秀的设计通常源于一个好的设计,并对其进行优化,理想情况下,设计是在开始着手实现之前进行的。系统架构图就是一个很好的理解系统的途径,也是软件设计的起点。从零开始一个项目是比较难的。因为刚开始的时侯很难把一个产品的功能定义清楚,所以可能需要经过好几轮的精心推敲之后才能确定一些思路。当我们在白板上写下产品的功能后,就可以开始思考如何设计软件架构。硬件工程师也做着同样的事情(虽然他们关注不同的领域,但理想情况是他们可以和软件设计师协同设计)。很快,就会有一个软件架构设计和电路原理图。根据开发者已有的条件,刚开始设计的一些项目可能会基于其他一些

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册