BruceFan's Blog

Stay hungry, stay foolish

0%

实验环境

VirtualBox + Ubuntu12.04 32bit + linux-3.10.103内核
这次编译的是32位的内核,因此64-bit kernel一项不能选中,而且一般将内核源码放置在/usr/src目录下。
编译命令make执行完之后,会产生核心bzImage和可加载模块modules
接着是安装过程:

阅读全文 »

PROGRAM LOADING

Introduction

这一篇介绍了目标文件信息和系统运行程序所需的动作。
可执行目标文件和共享目标文件都是静态的表示程序。为了执行这样的程序,系统使用这些文件来创建动态的程序表示,即进程映像。一个进程映像通过segment保存文本、数据、堆栈等。

阅读全文 »

原理解析

下面看一下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; // 报错:引用必须被初始化

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

阅读全文 »