Linux内核之——C语言“徒手”写内存!
2015-12-01 23:55
501 查看
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/18990055
在application程序猿的眼中,C语言写内存的方法,千篇一律,如下:
但是,如果是系统程序,没有malloc,甚至需要你自己设计malloc, 如何来写内存呢 ?
下边为大家展示一种技术,此技术比较血腥和暴力,少儿不宜。
满了18岁的小朋友可以继续观看。
胆子大一点的童鞋猜一猜呢,ptr1->i是多少呢?
没错,输出是这样的:
那么,ptr1->j是多少呢?
如果知道答案,那么,他为什么会是这个结果呢?
如果你还没有看懂,加我的QQ号吧。
如果你理解了本hack的核心原理,再去阅读Linux内核的分页管理、swap技术什么的,就易如反掌了。
在application程序猿的眼中,C语言写内存的方法,千篇一律,如下:
struct mystr * ptr; ptr = malloc(sizeof(*ptr)); ptr->fildA='abc'; ptr->fildB=89;
但是,如果是系统程序,没有malloc,甚至需要你自己设计malloc, 如何来写内存呢 ?
下边为大家展示一种技术,此技术比较血腥和暴力,少儿不宜。
满了18岁的小朋友可以继续观看。
1 #include <stdio.h> 2 #include <malloc.h> 3 4 struct str1 { 5 int i; 6 char j; 7 }; 8 9 int main(){ 10 struct str1 * ptr1; 11 ptr1 = malloc(sizeof(*ptr1)); 12 *((int*)ptr1)=23; 13 *((char*)((int*)ptr1 + 1))='a'; 14 15 printf("now ptr1->i is:%d\n",ptr1->i); 16 printf("now ptr1->j is:%d\n",ptr1->j); 17 18 return 0; 19 }
胆子大一点的童鞋猜一猜呢,ptr1->i是多少呢?
没错,输出是这样的:
[root@localhost ~]# ./memwrite now ptr1->i is:23
那么,ptr1->j是多少呢?
如果知道答案,那么,他为什么会是这个结果呢?
如果你还没有看懂,加我的QQ号吧。
如果你理解了本hack的核心原理,再去阅读Linux内核的分页管理、swap技术什么的,就易如反掌了。
相关文章推荐
- Linux内核源代码解析之——欲三次握手,先构造传输控制块!
- 【转】G40-70、G50-70联想小新笔记本SR1000随机Linux改Windows 7系统操作指导
- Linux内核zero-copy小试牛刀(加注释)
- Linux文件所用到的系统调用的函数总结
- linux socket 编程(C语言)--转载
- 软中断网卡处理&Linux高性能外部设备处理机制
- Linux五个查找命令
- linux下virtualbox和wine
- Linux内核网卡收包机制历史变革
- 从linux的findso、finda命令所想到的------所想即所得与所见即所得
- Linux keepalived与lvs的深入分析
- Linux内核的信号机制——怪胎
- Linux下配置文件读取操作流程及其C代码实现
- 我的VPS选择之路
- linux命令复用技巧
- Linux学习笔记(3)之文件操作
- Linux负载均衡软件之LVS
- linux下如何设置vip(虚拟ip)
- Linux下select&poll&epoll的实现原理(一)
- linux软件包管理