- 博客(109)
- 资源 (9)
- 收藏
- 关注
原创 Dart FFI的简单分析
本文是阅读dart ffi相关的代码记录。源码的位置分成几个部分,dart的代码在sdk/lib/ffi下,有4个文件annotations.dartdynamic_library.dart : 定义DynamicLibrary类,用于加载so库ffi.dart 定义Pointer类native_type.dart 定义NativeTypePointer相关的实际实现的代码,在runtime/lib/ffi_path.dart, 定义的对应的native实现,关键的如Pointer
2020-05-15 20:11:56
4658
原创 v8 8.0以上版本中,V8_COMPRESS_POINTERS引发的崩溃
在移植过程中,遇到了指针崩溃的问题,经过多方查找,终于确定和V8_COMPRESS_POINTERS导致的问题。V8_COMPRESS_POINTERS是v8新加入的功能。可以节省不少内存占用。如果设置v8_enable_pointer_compression = false就会关闭。如果关闭了该功能,程序可以正常运行。实际上,该功能只会在64位上开启。因为该功能是将64位指针压缩为32位指...
2020-02-20 08:48:05
1666
原创 v8 handlescope的机制
HandleScope成员HandleScope类重要的3个成员internal::Isolate* isolate_;intieral::Object** prev_next_;internal::Object** prev_limit_;HandleScope::CreateHandleObject** HandleScope::CreateHandle(Isolate* ...
2019-01-23 09:48:35
1457
原创 ART深入浅出(7) - OAT文件的格式
本文基于Android 7.1,不过因为从BSP拿到的版本略有区别,所以本文提到的源码未必与读者找到的源码完全一致。本文在提供源码片断时,将按照 : 的方式,如果行号对不上,请参考类名和函数名来找到对应的源码。从本章开始,我将介绍OAT文件的格式以ELF文件格式作为外壳从手机上下载一个oat文件。一般我都是研究boot.oat。比如,用命令 adb pull /data/da
2017-10-10 11:10:51
3895
原创 利用ADB 协议建立PC与手机端本地unix套接字的连接
设置环境变量 export ADB_TRACE=adb 可以取的值包括 all, adb, sockets, packets, rwx, usb, sync, sysdeps, transport, jdwp, services, auth, fdevent, shell 取多个值用空格分割但是adb 内部限制了输出的字数,导致最重要的writex输出(即最总发送给adb server的数据)
2017-09-28 11:40:15
2312
原创 android telnet 连接
adb shell 登录到设备上,需要root权限。然后执行 busybox telnetd -l /system/bin/sh退出后,在客户端用telnet连接。即使拔掉usb先也可以。
2017-09-27 16:37:35
4995
原创 ART深入浅出5--了解Dex文件格式(2)
本节介绍ClassDef的格式。ClassDef是Dex文件内部表示一个类的结构。包含了类的基本数据,如类的名称,访问级别,Field列表,Method列表等信息。
2017-08-22 08:36:20
1595
原创 ART深入浅出3--了解Boot.art和boot-*.art
在Android7.0之前,所有bootclasspath指定的库会被同一编译成为boot.oat和boot.art两个文件。其中boot.oat包含了编译后的机器码指令,而boot.art文件,则是一个类对象映像。boot.art内包含了所有framework/base/preloaded-classes文件列出的所有类。这些类会被一次性的载入到内存中,并可以被直接使用。
2017-08-01 17:57:25
8796
1
原创 ART深入浅出2 -- 认识和了解Runtime Options
本文基于Android 7.1,不过因为从BSP拿到的版本略有区别,所以本文提到的源码未必与读者找到的源码完全一致。本文在提供源码片断时,将按照 android工程的路径>: 的方式,如果行号对不上,请参考类名和函数名来找到对应的源码。
2017-07-14 20:51:56
2387
原创 ART深入浅出1--虚拟机的启动和初始化
本文基于Android 7.1,不过因为从BSP拿到的版本略有区别,所以本文提到的源码未必与读者找到的源码完全一致。本文在提供源码片断时,将按照 : 的方式,如果行号对不上,请参考类名和函数名来找到对应的源码。启动虚拟机我们知道,Android的应用程序和服务都是由zygote进程产生的。zygote进程负责创建一个java虚拟机环境,并调用zygote的java入口。zy
2017-07-04 19:58:31
2565
原创 DAVLIK JIT编译实现 (上)
为什么要讲dalvik jit的编译实现呢?首先,为什么是dalvik?虽然dalvik已经在L版本后不再出现在Android系统中,但是ART是从dalvik继承而来,ART中有很多Dalvik的痕迹。在很多方面,ART都继承了dalvik的思想,如果不深入了解dalvik,对ART的了解也是不全面的。另外,dalvik相对与ART,逻辑结构更加简单和清晰,很多方面都可以看作ART的雏形和蓝本,
2016-08-25 11:00:37
2350
原创 DALVIK JIT 入口分析
dvmCompileTrace函数如何进入到JIT模式?如何获取需要JIT的代码?jit出的代码放在哪里?jit出代码与bytecode的对应关系是什么?dvmCompileTrace过程分析BasicBlockMIRLIRAssemble寄存器分配规则是什么?
2016-08-18 14:01:49
2669
原创 android N编译遇到的问题
遇到 Failed to contact Jack server: Problem reading .jack-server/client.pem. Try 'jack-diagnose'错误。解决方法是:jack-admin kill-serverjack-admin uninstall-server然后make systemimage可参阅https:
2016-08-02 11:05:01
12877
原创 dalvik VM的解释器分析
以KK的dalvik源码为基础来解析。使用的源码基于https://github.com/AOKP/dalvik, 可以从https://github.com/AOKP/dalvik/archive/kitkat.zip 下载。我是在linux下,使用vim + ctags做分析的。由于ARM架构是使用最多也是最频繁的架构,所以我分析的重点是ARM的汇编如何实现解释器的。所以我在分
2016-07-25 17:29:39
4012
原创 G1 算法论文
GC相关术语 Compaction – The garbage collection phase that defragments the heap, moves objects in memory, remaps all affected references and frees contiguous memory regions. Concurrent – A type of g
2016-07-20 00:14:53
1972
原创 DVM GC源码研究
基于KK的代码。本文主要是介绍dalvik GC的一些概况。DalvikGC概要Davik GC的主要对象GCHeap : 管理GC内存的对象,全局只有一个,负责GC的分配和回收HeapSource: 管理Heap的对象。在GC初始化时,分配一段连续的地址空间(maximumSize), 负责管理Heap的增长Heap: 为分配准备的连续空间。HeapSource包含两个Hea
2016-07-08 18:58:14
2199
原创 通过dexdump来学习DEX文件格式
一、dexdump简介dexdump是android提供的一个dex文件查看工具,在4.4之前的版本上,我们可以在dalvik的dexdump目录找到源码。这个工具简单而且全面。通过学习这个工具的源码,我们可以很快的对dex文件有一个全面的了解。 首先看下dexdump的命令行参数: dexdump: [-c] [-d] [-f] [-h] [-i] [-l layout] [-m] [-t
2016-06-16 16:27:54
16066
3
原创 ART虚拟机参数说明
propertyJVM参数含义取值备注dalvik.vm.checkjni || ro.kernel.android.checkjni取true|false-Xcheck:jni当调用jni函数时,打开jni检查 -Xjnigreflimit:设置JNI全局引用的最大数量整数,如2000
2016-06-15 18:42:07
6972
原创 dalvik字节码问答
什么是字节码?字节码的长度怎么计算?字节码的格式是什么?const类指令有那些?和类、对象操作相关的指令有哪些?switch相关指令是怎么回事?Array数据操作指令有那些?quick类型的指令有那些,起到什么作用?execute-inline指令是怎么回事?
2016-05-10 19:52:18
3980
原创 杂谈:关于声明式语言
对于一个需要构建复杂的内存结构,相互之间有复杂的依赖关系的应用,如GUI等,用什么样的开发方法最好?首先,是个语言选择的问题。C/C++,以及java这样的语言,是基于命令式的。命令式的语言,强调的是做事的步骤,先做什么,后做什么。前面的步骤直接影响后面的步骤。这样的语言很容易被理解,却不能创造出简洁、复杂而高效的程序。对于函数式语言,虽然我了解不多,但是相对于命令
2016-04-19 19:17:18
3355
原创 怎么挂载android system.img
首先使用simg2img将其解压为raw image, 然后用mount 挂载。如 out/host/linux-x86/bin/simg2img out/target/product//system.img raw_system.imgsudo mount -t ext4 raw_system.img /mnt/android/system
2016-01-05 10:42:47
7231
原创 你所不知到的C++ 之 多重继承
1. C++中class与struct。在C++里面,class与struct没有本质的区别,只是class的默认权限是private,而struct则是public。这个概念也揭示了一点:class和struct在内部存储结构上是一致的。所以我们可以利用这一点来探讨class的实现原理。我们可以将class转换成对应的struct对象,通过struct的简单性来展示class的内存存储结构。
2015-03-25 13:52:14
1199
原创 你所不知道的C++ 之 C++虚类模型
我们知道,一个C++类如果带有virtual关键字的函数,那么,它就是一个虚类。虚类都有虚函数表。这个虚函数表真的存在吗?能摸得着、看得见吗?的确是可以的。下面我们就展示一下如何看到C++类的虚函数表。
2015-03-11 10:09:09
2218
原创 你所不知到的C++ 之 宏的用法
前言严格的说,宏并不是C++语言的组成部分。宏是一种文本替换语言,用在C/C++的预编译系统中。宏能在一定程度上简化代码。宏主要有#include, #define, #if/#else#elseif#endif和#line等一些语法组成。宏在C/C++中是不可或缺的。比如#include指令。在增强可移植性上也起到了非常重要的作用。当然,当你使用#define的时候,如果使用
2015-03-10 16:32:43
1227
原创 你所不知道的C++ 之 使用typename
当使用模板类型中定义的类型时,该怎么办呢?可以使用关键字typename。例如class AType {public: typedef int value_type;};templateclass TSample { typedef typename T::value_type value_type;}当使用TSample的时候,TSample的value
2015-03-10 15:47:36
1195
原创 你所不知道的C++ 之 令人疑惑的默认构造
最近写代码的时候发现一个奇怪的现象:当我声明一个无参构造函数时,如果后面加上括号,声明出的对象就不能显示。比如下面的代码:#include class Test {public: Test() { printf("Test constructed\n"); }};int main(){ printf("==== t1:\n");
2015-03-10 15:36:42
1309
原创 ART如何实现Exception.printStackTrace
大家都很熟悉Exception.printStackTrace,而且也非常的常用。不过,各位有没有想过应该如何实现呢?想象一下,当我们调试一个C/C++程序的时候,我们也能看到函数的调用堆栈,一定会想,这究竟是怎么做到呢?因为ART运行的也是机器码,那么它们也一定有共同的地方吧。当然,我们并不是真正的去了解一个C/C++程序是如何实现调试的,我们只是借鉴一下它的原理。以
2015-01-24 12:19:53
1575
原创 ART是怎么实现参数传递的?
在Java世界,有两类函数:普通的函数和native函数。Native函数是由C/C++或者汇编语言实现的函数。那么,函数之间的调用就有:普通->普通,native->普通,普通->native。这三种类型的调用,可以发生在任意时间、任意地点,以任意方式来调用。那么,这三种调用方式必然存在很大的共同点。如果我们能够破解一种的话,那么其余两种也就能够很轻易的破解了。那么,选哪一种
2015-01-22 14:24:59
3671
原创 序言
屈指算来,在软件开发这个行业工作也有10个年头了,可惜没有积累下什么东西。因为工作关系,对Android的ART进行了深入研究。我对ART工作的机制和原理产生了兴趣,有一种想把它搞清楚的冲动。ART可以说是一个杰作!它融合了虚拟机、编译器、GC等各方面的知识和原理,具有很高的学习价值。对于一个希望提高自己的层次的开发人员,学习ART恐怕是最好的方法了。也是基于这个想法,我想把我对A
2015-01-22 14:23:35
1311
原创 在PreferenceAcitity中使用Fragement时避免额外的Left和RightPadding
On Android 4.4遇到过这样的问题:注意到,上面的ActionBar部分的左右各有48像素的padding。 要了解该问题的成因,要首先了解其结构:该页面的Activity是一个PreferenceActivity,是个三级页面,是通过上一个PreferenceActivity调用startWithFragment启动的;该页面的内容是放置了一个Fragmen
2014-07-16 10:20:34
2579
原创 Override ListView getAdapter造成的后果
最近工作中,发现了一个bug,是和ListView Adapter有关的。产生了FC,描述信息大约是"The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a b
2014-07-05 22:42:47
4398
原创 V8 javascript引擎初步体验
v8 引擎,不必多说,大名鼎鼎,迄今最快的js引擎。这么好的东西,如果尽在浏览器中使用,太浪费了,也希望用到其他地方,比如一些客户端开发中。闲言少讲,这就开始下载源码去官方网站:https://code.google.com/p/v8/我喜欢用git,所以从这里下载git clone git://github.com/v8/v8.git v8 && cd v
2014-06-19 13:23:59
26482
原创 android精确绘制文字位置的方法
android 中使用Canvas的drawText绘制文本的位置,是基于基线的。如下图:其中字母Q的小尾巴在横线下面了。怎么样找准字母的中心位置呢?先看下面的例子:(右边的数字,表示字体的 left, top, right, bottom)这里面的关键是Paint.getTextBound。 getTextBound会填充一个Rect,这个Rect表示
2014-06-06 14:22:57
13807
原创 Android listview 利用反射的自动绑定Adapter
网上有很多介绍ListView的用法,大多涉及了Adapter。Android提供的Adapter主要有ArrayAdapter, SimpleAdapter, SimpleCursorAdapter。当然,也介绍了如何自己从BaseAdapter继承的方法。但是,这些文章介绍的方法距离实际使用还是很有距离的,基本处于练手的级别。对于很多开发者来说,实现一个功能复杂、效率高的ListView还
2014-01-07 16:19:29
3781
原创 cppquery 简单的数据绑定对话框
上一篇文章: cppquery:用C++模仿jquery的探索获取cppquery: https://github.com/coderebot/cppquery在本文中,我们用绑定的方法来实现一个对话框:将高度和宽度值绑定到一个对话框上,并能够修改。如图当然,从windows编程上来说,这只是一个非常入门的功能。我们从这里出发,来看看我们能够简化到何种程度。该窗
2013-12-31 14:31:51
1849
原创 cppquery:用C++模仿jquery的探索
获取cppquery: https://github.com/coderebot/cppqueryCPPQuery是什么CPPQuery是仿照jquery,顾名思义,就是c++ query。它是针对windows API的GUI,提供一套类似jquery的接口。目的是:简化GUI的编程,最终目的是构建一个更加简洁和智能的MVC架构。主要目标有:将GUI中分散的代码集中处
2013-12-26 11:10:46
3073
android svg 的源码资源
2014-06-29
android listview 自反射 adapter
2014-01-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人