程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C語言編程技巧:C語言“徒手”寫內存

C語言編程技巧:C語言“徒手”寫內存

編輯:更多關於編程

      在application程序猿的眼中,C語言寫內存的方法,千篇一律,如下:

      struct mystr * ptr;

      ptr = malloc(sizeof(*ptr));

      ptr->fildA='abc';

      ptr->fildB=89;

      但是,如果是系統程序,沒有malloc,甚至需要你自己設計malloc,如何來寫內存呢?

      下邊為大家展示一種技術,此技術比較血腥和暴力,少兒不宜。

      滿了18歲的小朋友可以繼續觀看。

      1 #include

      2 #include

      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:%dn",ptr1->i);

      16 printf("now ptr1->j is:%dn",ptr1->j);

      17

      18 return 0;

      19 }

      膽子大一點的童鞋猜一猜呢,ptr1->i是多少呢?

      沒錯,輸出是這樣的:

      [root@localhost ~]# ./memwrite

      now ptr1->i is:23

      那麼,ptr1->j是多少呢?

      如果知道答案,那麼,他為什麼會是這個結果呢?

      如果你還沒有看懂,加我的QQ號吧。

      如果你理解了本hack的核心原理,再去閱讀Linux內核的分頁管理、swap技術什麼的,就易如反掌了。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved