在application程序猿的眼中,C语言写内存的方法,千篇一律,如下:LMGHTML5中文学习网 - HTML5先行者学习网
struct mystr * ptr;LMGHTML5中文学习网 - HTML5先行者学习网
ptr = malloc(sizeof(*ptr));LMGHTML5中文学习网 - HTML5先行者学习网
ptr->fildA='abc';LMGHTML5中文学习网 - HTML5先行者学习网
ptr->fildB=89;LMGHTML5中文学习网 - HTML5先行者学习网
但是,如果是系统程序,没有malloc,甚至需要你自己设计malloc,如何来写内存呢?LMGHTML5中文学习网 - HTML5先行者学习网
下边为大家展示一种技术,此技术比较血腥和暴力,少儿不宜。LMGHTML5中文学习网 - HTML5先行者学习网
满了18岁的小朋友可以继续观看。LMGHTML5中文学习网 - HTML5先行者学习网
1 #includeLMGHTML5中文学习网 - HTML5先行者学习网
2 #includeLMGHTML5中文学习网 - HTML5先行者学习网
3LMGHTML5中文学习网 - HTML5先行者学习网
4 struct str1 {LMGHTML5中文学习网 - HTML5先行者学习网
5 int i;LMGHTML5中文学习网 - HTML5先行者学习网
6 char j;LMGHTML5中文学习网 - HTML5先行者学习网
7 };LMGHTML5中文学习网 - HTML5先行者学习网
8LMGHTML5中文学习网 - HTML5先行者学习网
9 int main(){LMGHTML5中文学习网 - HTML5先行者学习网
10 struct str1 * ptr1;LMGHTML5中文学习网 - HTML5先行者学习网
11 ptr1 = malloc(sizeof(*ptr1));LMGHTML5中文学习网 - HTML5先行者学习网
12 *((int*)ptr1)=23;LMGHTML5中文学习网 - HTML5先行者学习网
13 *((char*)((int*)ptr1 + 1))='a';LMGHTML5中文学习网 - HTML5先行者学习网
14LMGHTML5中文学习网 - HTML5先行者学习网
15 printf("now ptr1->i is:%dn",ptr1->i);LMGHTML5中文学习网 - HTML5先行者学习网
16 printf("now ptr1->j is:%dn",ptr1->j);LMGHTML5中文学习网 - HTML5先行者学习网
17LMGHTML5中文学习网 - HTML5先行者学习网
18 return 0;LMGHTML5中文学习网 - HTML5先行者学习网
19 }LMGHTML5中文学习网 - HTML5先行者学习网
胆子大一点的童鞋猜一猜呢,ptr1->i是多少呢?LMGHTML5中文学习网 - HTML5先行者学习网
没错,输出是这样的:LMGHTML5中文学习网 - HTML5先行者学习网
[root@localhost ~]# ./memwriteLMGHTML5中文学习网 - HTML5先行者学习网
now ptr1->i is:23LMGHTML5中文学习网 - HTML5先行者学习网
那么,ptr1->j是多少呢?LMGHTML5中文学习网 - HTML5先行者学习网
如果知道答案,那么,他为什么会是这个结果呢?LMGHTML5中文学习网 - HTML5先行者学习网
如果你还没有看懂,加我的QQ号吧。LMGHTML5中文学习网 - HTML5先行者学习网
如果你理解了本hack的核心原理,再去阅读Linux内核的分页管理、swap技术什么的,就易如反掌了。LMGHTML5中文学习网 - HTML5先行者学习网