<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      STM32/GD32上內(nèi)存堆棧溢出探測研究

      無數(shù)次遭受堆棧溢出折磨,隨著系統(tǒng)變得復雜,故障點越來越難以查找!
      主要溢出情況如下:
      1,一般RAM最后兩塊空間是堆Heap和棧Stack,堆從下往上用,棧從上往下用,任意一個用完,都會進入對方的空間
      2,如果棧用完,進入堆的空間,這個時候系統(tǒng)是不會有任何異常的,也就是說,棧底沒有什么意義。除非堆和棧指針重疊,否則大家相安無事,盡管棧用了堆的
      3,如果棧用完進入堆,并且還碰到了堆的空間,這個時候系統(tǒng)仍然沒有異常,但是堆棧會相互修改數(shù)據(jù)。最悲劇的就是棧里面保存的然會地址lr,一旦被堆指針修改,返回的時候就會跳到別的地址空間去了。絕大多數(shù)時候是這種情況,并且大多數(shù)跳到無效空間去。你應該感謝它跳到無效空間,讓你馬上發(fā)現(xiàn)錯誤。否則堆棧互相穿透而不報錯,然后系統(tǒng)工作出現(xiàn)數(shù)據(jù)錯亂,到時候看你想撞頭還是想跳樓!
      4,使用Keil的微庫,malloc要用到堆空間,如果堆空間用完,再malloc的時候得到空指針,但是不會報錯。然而,如果使用C++的new,這個時候會報錯!

      因為主線程和中斷處理的存在,隨時可能分配釋放內(nèi)存,這就導致了問題隨時可能發(fā)生!非常難檢查問題所在!

      因此,SmartOS v2.5增加了內(nèi)存堆棧溢出探測模塊
      聲明:

      #ifdef DEBUG
      
      void* operator new(uint size);
      void* operator new[](uint size);
      void operator delete(void * p);
      void operator delete [] (void * p);
      
      #endif

      實現(xiàn):

      extern uint __heap_base;
      extern uint __heap_limit;
      
      void* operator new(uint size)
      {
          debug_printf(" new size: %d ", size);
          void * p = malloc(size);
          if(!p)
              debug_printf("malloc failed! size=%d ", size);
          else
          {
              debug_printf("0x%08x ", p);
              // 如果堆只剩下64字節(jié),則報告失敗,要求用戶擴大堆空間以免不測
              uint end = (uint)&__heap_limit;
              if((uint)p + size + 0x40 >= end) debug_printf(" + %d near HeapEnd=0x%08x", size, end);
          }
          assert_param(p);
          return p;
      }
      
      void* operator new[](uint size)
      {
          debug_printf(" new size[]: %d ", size);
          void * p = malloc(size);
          if(!p)
              debug_printf("malloc failed! size=%d ", size);
          else
          {
              debug_printf("0x%08x ", p);
              // 如果堆只剩下64字節(jié),則報告失敗,要求用戶擴大堆空間以免不測
              uint end = (uint)&__heap_limit;
              if((uint)p + size + 0x40 >= end) debug_printf(" + %d near HeapEnd=0x%08x", size, end);
          }
          assert_param(p);
          return p;
      }
      
      void operator delete(void * p)
      {
          debug_printf(" delete 0x%08x ", p);
          if(p) free(p);
      }
      
      void operator delete[](void * p)
      {
          debug_printf(" delete[] 0x%08x ", p);
          if(p) free(p);
      }

      通過重載new/delete實現(xiàn),并且?guī)в?4字節(jié)提前預測功能!在堆即將用完之前預警!

      posted @ 2017-09-01 13:55  大石頭  閱讀(1926)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 狠狠噜天天噜日日噜| 精品午夜福利短视频一区| 丰满熟妇人妻中文字幕| 日韩精品一区二区三区色| 亚洲欧美牲交| 亚洲综合成人av在线| 亚洲一区二区三区在线播放无码| 欧美极品色午夜在线视频| 疯狂做受xxxx高潮视频免费| 日本国产精品第一页久久 | 视频一区视频二区视频三区| 无码精品一区二区免费AV| 极品美女自拍偷精品视频| 南乐县| 午夜福利国产片在线视频| 国产99视频精品免费视频36| 成年女人碰碰碰视频播放| 国产在线自拍一区二区三区| 精品综合久久久久久97| 国产精品七七在线播放| 国产丝袜视频一区二区三区 | 国产人妻人伦精品婷婷| 国产综合亚洲区在线观看| 亚洲欧美偷国产日韩| 蜜桃av无码免费看永久| 无遮挡又黄又刺激的视频| 资源新版在线天堂偷自拍| 97欧美精品系列一区二区| 无码专区 人妻系列 在线| 国产福利深夜在线播放| 最近高清中文在线字幕在线观看| 精品视频国产狼友视频| 国产精品成人av电影不卡| 亚洲国产av剧一区二区三区| 精品人妻久久久久久888| 自拍偷自拍亚洲精品情侣| 国产午夜福利精品视频| 亚洲综合无码AV在线观看| 国产美女深夜福利在线一| www射我里面在线观看| 老师破女学生处特级毛ooo片|