青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

   C++ 技術中心

   :: 首頁 :: 聯(lián)系 ::  :: 管理
  160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

公告

鄭重聲明:本BLOG所發(fā)表的原創(chuàng)文章,作者保留一切權(quán)利。必須經(jīng)過作者本人同意后方可轉(zhuǎn)載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

留言簿(27)

搜索

  •  

最新隨筆

最新評論

評論排行榜

#ifndef _CHECKMEMOVERFLOW_H_
#define _CHECKMEMOVERFLOW_H_

#define CHECK_MEM_OVERFLOW

#ifdef CHECK_MEM_OVERFLOW
//操作系統(tǒng)內(nèi)存分配粒度為頁面(4K)
#define PAGE_SIZE 4096

#define PLATFORM_WIN32
#ifdef PLATFORM_WIN32
#include <stdlib.h>
#include <windows.h>
/*
*        ooooooooooooo      |  *******
(*)acture memory pages   |  protect page
*/
inline void * operator new (size_t size)
{
    size_t page_num = (size_t)(size / PAGE_SIZE);
    size_t offset = 0;
    if(0 != (size % PAGE_SIZE))
    {
        page_num++;
        offset = PAGE_SIZE - size % PAGE_SIZE;
    }

    void *p = VirtualAlloc(NULL,page_num*PAGE_SIZE+1,MEM_COMMIT,PAGE_READWRITE);

    void *pchecker = (char*)p + page_num*PAGE_SIZE;
    DWORD old_value;
    VirtualProtect(pchecker,PAGE_SIZE,PAGE_NOACCESS,&old_value);

    return (char *)p + offset;
}
inline void operator delete(void *p)
{
    void* address = (char *)p - (size_t)(p) % PAGE_SIZE;
    VirtualFree(address,0,MEM_RELEASE);
}
#else
#include <stdlib.h>
#include <sys/mman.h>
#include <stdio.h>
/*
* ********* |ooooooooooooooooooooo    |  ***********
* size page |(*)acture memory pages   |  protect page
*/
//gcc : connot be inline
void * operator new (size_t size)
{
    //calc page num and offset
    int page_num = (int)(size / PAGE_SIZE + 1);
    size_t offset = page_num * PAGE_SIZE - size;

    //alloc memory pages
    void *p = mmap(NULL,page_num*PAGE_SIZE+2,PROT_READ|PROT_WRITE,MAP_PRIVATE | MAP_ANON, -1, 0);

    //saved page num
    size_t* pSize = (size_t*)((char*)p+PAGE_SIZE-sizeof(size_t));
    *pSize = page_num+2;
    mprotect(p, PAGE_SIZE, PROT_NONE);

    //set memory overflow protect page
    void *pchecker = (char*)p + page_num*PAGE_SIZE;
    mprotect(pchecker, PAGE_SIZE, PROT_NONE);

    return (char *)p + offset;
}
void operator delete(void *p)
{
    //calc acture memory page start address
    void* address = (char *)p - (size_t)p % PAGE_SIZE;
    
    mprotect((char*)address-PAGE_SIZE, PAGE_SIZE, PROT_READ);
    size_t pagenum = (size_t)*((char*)address-sizeof(size_t));

    munmap((char*)address-PAGE_SIZE, pagenum*PAGE_SIZE);
}
#endif


#endif

//#define TEST_OVERFLOW
#ifdef TEST_OVERFLOW

#include <stdio.h>
int main(int argc,char *argv[])
{
    printf("test start\n");
    char * a = new char[12340];
    printf("%c\n",a[12340]); //程序運行到這里將出現(xiàn)debug中斷
    delete[] a;
    printf("test done\n");
    return 0;
}
#endif
#endif


原理:

1,重載全局new/delete,接管內(nèi)存申請/釋放;

2.a,在windows下,頁面最小分配單位為4K,調(diào)用VirtualAlloc分配內(nèi)存,并在最后一個頁面后面添加一個“哨兵”頁面,頁面屬性為NOACCESS,讀寫該頁面均crash;

2.b,在linux下,原理同上,但必須在申請的內(nèi)存前面多申請一個頁面保存申請的頁面數(shù);


注意:

只能在C++中使用,windows/mac下測試通過。


使用方法:

只要include這個頭文件即可,且內(nèi)存必須是new出來的,而非malloc的。

參考:

1,http://www.wangchao.net.cn/bbsdetail_65784.html

2,http://blog.csdn.net/cjfeii/article/details/9122279

posted on 2014-08-22 16:53 C++技術中心 閱讀(1606) 評論(0)  編輯 收藏 引用 所屬分類: C++ STL

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            夜夜爽www精品| 亚洲自拍啪啪| 亚洲精品影视| 裸体一区二区三区| 亚洲欧美日韩人成在线播放| 欧美日本一区| 日韩视频一区| 亚洲高清三级视频| 欧美一区二区播放| 国产亚洲毛片在线| 欧美一区二区三区在线看| 亚洲区欧美区| 欧美喷潮久久久xxxxx| 亚洲国产精品高清久久久| 久久国产精品电影| 欧美一区二区私人影院日本| 国产亚洲观看| 裸体一区二区三区| 欧美黑人多人双交| 亚洲视频日本| 亚洲一区三区电影在线观看| 国产精品二区二区三区| 亚洲专区免费| 久久爱www久久做| 狠狠色狠狠色综合| 欧美激情亚洲视频| 欧美精品一区在线观看| 亚洲一区二区视频在线观看| 一区二区三区四区五区视频| 国产精品一页| 看欧美日韩国产| 欧美经典一区二区三区| 亚洲一二三区精品| 午夜久久电影网| 亚洲成色777777女色窝| 亚洲人成网站色ww在线| 国产精品视频网址| 欧美国产综合一区二区| 欧美三级在线| 久久视频这里只有精品| 欧美美女视频| 久久久久久综合网天天| 欧美成人按摩| 久久国产乱子精品免费女| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲视屏一区| 亚洲专区欧美专区| 亚洲第一区在线观看| 亚洲精品久久久久久久久久久| 国产精品精品视频| 欧美ed2k| 国产欧美日韩视频在线观看| 最近中文字幕日韩精品 | 欧美激情91| 亚洲一区二区综合| 亚洲欧洲在线播放| 亚洲天堂网在线观看| 国产美女诱惑一区二区| 久久久久久91香蕉国产| 欧美日韩精品一区二区天天拍小说| 久久岛国电影| 欧美日韩三级一区二区| 毛片av中文字幕一区二区| 国产精品久久久久久久久久免费 | 夜夜嗨av一区二区三区中文字幕 | 国产午夜精品理论片a级大结局 | 午夜亚洲福利在线老司机| 亚洲黄色天堂| 久久精品视频亚洲| 亚洲欧美日韩在线高清直播| 免费观看久久久4p| 久久久蜜桃精品| 欧美婷婷在线| 亚洲精品一二区| 亚洲国产精品免费| 欧美在线视频免费播放| 午夜精品成人在线视频| 欧美日韩国产首页在线观看| 亚洲电影在线播放| 亚洲成人影音| 久久在线免费观看| 农夫在线精品视频免费观看| 国产亚洲欧美在线| 亚洲一品av免费观看| 亚洲一区亚洲| 欧美视频在线观看| 亚洲图片欧洲图片av| 亚洲淫性视频| 国产精品久久波多野结衣| 99精品欧美一区二区三区| 一本一本a久久| 欧美日韩另类综合| 9l国产精品久久久久麻豆| 一区二区三区四区国产精品| 欧美理论电影网| 99精品国产福利在线观看免费| 日韩视频一区二区| 欧美视频在线视频| 亚洲免费一级电影| 久久久久久免费| 在线视频国产日韩| 欧美va亚洲va香蕉在线| 亚洲日本中文字幕区| 中文日韩在线视频| 国产精品乱码一区二三区小蝌蚪| 中文网丁香综合网| 欧美综合国产精品久久丁香| 国产一区亚洲一区| 久久久999精品免费| 欧美大片va欧美在线播放| 亚洲欧洲一区二区在线播放| 亚洲欧美日韩第一区| 国产精品欧美日韩| 欧美一级在线视频| 免费亚洲视频| 99国内精品久久| 国产精品成人观看视频国产奇米| 亚洲一区国产精品| 六月婷婷一区| 99re6这里只有精品| 国产精品丝袜久久久久久app| 亚洲一区二区三区视频播放| 久久久久久亚洲精品中文字幕 | 日韩视频免费在线| 国产精品视区| 两个人的视频www国产精品| 日韩视频一区二区在线观看| 欧美亚洲尤物久久| 91久久视频| 国产精品天天看| 老牛国产精品一区的观看方式| 亚洲精品久久嫩草网站秘色 | 午夜精品剧场| 亚洲激情视频网| 久久精品国产精品亚洲精品| 亚洲欧洲精品成人久久奇米网| 欧美性事免费在线观看| 久久在线免费| 性做久久久久久久久| 91久久国产综合久久| 欧美一区二区三区播放老司机| 亚洲国产成人高清精品| 国产欧美一区二区三区在线老狼 | 亚洲欧洲三级电影| 久久久999成人| 一区二区不卡在线视频 午夜欧美不卡'| 国产精品视频一| 欧美日韩国产色视频| 裸体女人亚洲精品一区| 午夜激情一区| 中文精品视频| 亚洲精品1234| 欧美www视频| 久久久国产精品一区二区三区| 亚洲天堂免费观看| 日韩视频亚洲视频| 亚洲国产高清在线| 国产一区二区三区电影在线观看| 欧美色网在线| 欧美久久久久| 欧美国产综合一区二区| 老司机免费视频一区二区三区 | 黄色亚洲在线| 国产欧美一区二区白浆黑人| 欧美午夜精品一区| 欧美另类videos死尸| 欧美激情91| 欧美va亚洲va国产综合| 蜜臀av在线播放一区二区三区| 久久精品成人| 欧美一区二区三区在线| 亚洲欧美日韩在线一区| 亚洲免费一在线| 香蕉成人啪国产精品视频综合网| 亚洲一区在线免费| 在线欧美日韩| 依依成人综合视频| 国产在线国偷精品产拍免费yy| 国产丝袜美腿一区二区三区| 国产精品激情电影| 国产精品美女久久久久久久| 国产精品久久福利| 国产精品伊人日日| 国外成人网址| 亚洲高清视频在线观看| 亚洲国产欧美一区| 亚洲人线精品午夜| 亚洲免费观看高清完整版在线观看| 91久久精品国产| 亚洲免费av片| 亚洲桃色在线一区| 亚洲综合色婷婷| 久久成人国产精品| 另类图片国产| 日韩视频免费| 午夜激情亚洲| 欧美大片免费观看| 国产精品久久国产精品99gif | 亚洲人成人一区二区在线观看| 亚洲黄色在线|