BruceFan's Blog

Stay hungry, stay foolish

0%

原理解析

下面看一下Android中加壳的原理:

在加固过程中需要三个对象:

  • 需要加密的APK(源程序APK)
  • 壳程序APK(负责解密APK工作)
  • 加密工具(将源APK进行加密和壳程序的DEX合并)
阅读全文 »

回调机制就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。下面结合经典的例子进行说明:

  • Class A实现接口CallBack callback —— 背景1
  • Class A中包含一个Class B的引用b —— 背景2
  • Class B有一个参数为callback的方法C(CallBack callback) —— 背景3
  • A的对象a调用B的方法C(CallBack callback) —— A类调用B类的某个方法C
  • 然后b就可以在C(CallBack callback)方法中调用A的方法 —— B类调用A类的某个方法D
阅读全文 »

动态加载可以用来进行插件开发,这些插件大概都是为了在一个主程序中实现比较通用的功能,使主程序具有可扩展性。实现原理是实现一套插件接口,把插件实现编成apk或dex,在运行时用DexClassLoader动态加载进来。
预备知识:Android中的动态加载机制

阅读全文 »

忘了说我的运行环境是Ubuntu14.04,vim,gcc version 4.8.4,操作系统和编辑器没什么要紧,gcc如果版本低了可能不支持C++11。
编译运行方法如下:

1
2
$ g++ -std=c++11 -o test test.c
$ ./test
阅读全文 »

复合类型

引用

引用(reference)为对象起了另外一个名字。

1
2
3
int ival = 1024;
int &refVal = ival; // refVal指向ival
int &refVal2; // 报错:引用必须被初始化

定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。无法令引用重新绑定到另外一个对象,因此引用必须初始化。

阅读全文 »

本文主要介绍Android动态加载jar的技术,如何开发一个可以自定义控件的Android应用?就像eclipse一样,可以动态加载插件;如何让Android应用执行服务器上的不可预知的代码?如何对Android应用加密,而只在执行时自解密,从而防止被破解?这篇文章是一个基础,后面的一些文章会以此继续深入。

阅读全文 »

运行时间
评估算法的性能。首先,要计算各个排序算法在不同的随机输入下的基本操作的次数(包括比较和交换,或者是读写数组的次数)。然后,我们用这些数据估计算法的相对性能。
额外的内存使用
排序算法的额外内存开销和运行时间是同样重要的。排序算法可分为两类:除了函数调用所需的栈和固定数目的实例变量之外无需额外内存的原地排序算法,以及需要额外内存空间来存储另一份数组副本的其他排序算法。

阅读全文 »

基于线程的并发编程

线程(thread)就是运行在进程上下文中的逻辑流。线程由内核自动调度。每个线程都有它自己的线程上下文(thread context),包括一个唯一的整数线程ID(Thread ID,TID)、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有运行在一个进程里的线程共享该进程的整个虚拟地址空间。

阅读全文 »