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

   C++ 技術(shù)中心

   :: 首頁 :: 聯(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]); //程序運(yùn)行到這里將出現(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)存,并在最后一個(gè)頁面后面添加一個(gè)“哨兵”頁面,頁面屬性為NOACCESS,讀寫該頁面均crash;

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


注意:

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


使用方法:

只要include這個(gè)頭文件即可,且內(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++技術(shù)中心 閱讀(1606) 評論(0)  編輯 收藏 引用 所屬分類: C++ STL

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            久久精品色图| 午夜亚洲性色视频| 亚洲欧美激情精品一区二区| 亚洲高清在线观看| 亚洲视频在线一区观看| 亚洲黄色在线观看| 午夜精品久久久久久久白皮肤| 日韩视频在线你懂得| 亚洲女人小视频在线观看| 亚洲蜜桃精久久久久久久| 久久精品国产999大香线蕉| 亚洲视频你懂的| 欧美3dxxxxhd| 欧美a级一区| 国产一区二区高清视频| 亚洲线精品一区二区三区八戒| 亚洲精品久久久久久久久久久久| 久久久久久久成人| 久久精品国产一区二区电影 | 免费黄网站欧美| 久久精品亚洲一区二区三区浴池| 国产精品久久二区二区| 一本色道久久综合亚洲精品小说| 亚洲精品视频在线播放| 美女主播一区| 欧美1区2区3区| 尤物yw午夜国产精品视频明星| 欧美亚洲视频| 欧美在线视频二区| 国产免费成人av| 午夜日韩福利| 久久精视频免费在线久久完整在线看 | 亚洲国产精品久久久久久女王| 精品91免费| 免费不卡亚洲欧美| 91久久国产精品91久久性色| 亚洲区一区二| 欧美日韩亚洲国产一区| 在线午夜精品| 欧美一级免费视频| 国产在线观看一区| 久久深夜福利免费观看| 欧美激情国产高清| 夜夜嗨av一区二区三区四季av | 欧美成人精品激情在线观看| 欧美激情在线免费观看| 亚洲欧洲精品一区二区三区| 欧美成人按摩| 亚洲午夜精品网| 久久精品一区蜜桃臀影院| 亚洲高清不卡| 欧美激情一区二区三区 | 亚洲第一中文字幕| 亚洲四色影视在线观看| 国产精品亚洲网站| 久久久一区二区| 亚洲精品久久视频| 亚洲成人在线视频网站| 欧美制服第一页| 暖暖成人免费视频| 欧美在线观看网站| 黄色av成人| 欧美高清在线| 亚洲女同在线| 欧美阿v一级看视频| 一本色道久久加勒比精品| 国产精品欧美日韩久久| 久久亚洲春色中文字幕| 一本一道久久综合狠狠老精东影业| 久久精品99国产精品日本| 亚洲国产精品第一区二区三区| 欧美视频一区二区在线观看| 久久超碰97人人做人人爱| 99视频+国产日韩欧美| 久久免费高清视频| 一本色道88久久加勒比精品| 国产综合精品| 欧美日韩一级视频| 美女网站在线免费欧美精品| 欧美午夜精品理论片a级按摩 | 免费成人美女女| 久热综合在线亚洲精品| 在线观看欧美激情| 亚洲午夜精品网| 欧美激情亚洲另类| 亚洲在线播放电影| 在线观看国产日韩| 欧美日韩成人综合在线一区二区| 久久精品夜色噜噜亚洲a∨| 亚洲人在线视频| 蜜桃av综合| 亚洲主播在线观看| 一区二区三区产品免费精品久久75| 国产精品久久777777毛茸茸| 欧美国产第一页| 欧美一区三区三区高中清蜜桃| 中国女人久久久| 欧美激情偷拍| 欧美大片免费观看| 西瓜成人精品人成网站| 欧美在线一二三| 亚洲午夜一区二区三区| 久久国产精品毛片| 亚洲欧美日本视频在线观看| 怡红院av一区二区三区| 好吊妞**欧美| 欧美性一区二区| 欧美日韩国产综合一区二区| 欧美不卡激情三级在线观看| 国内精品久久久久久久果冻传媒| 国产精品久久久久9999| 久久久91精品国产| 亚洲一区二区免费在线| 99香蕉国产精品偷在线观看| 欧美激情中文字幕乱码免费| 欧美福利专区| 欧美a一区二区| 亚洲成色www久久网站| 久久亚洲视频| 乱中年女人伦av一区二区| 久久99在线观看| 久久久精品网| 久久久综合激的五月天| 六月天综合网| 蜜臀av在线播放一区二区三区| 欧美暴力喷水在线| 蜜臀av国产精品久久久久| 免费亚洲婷婷| 久久视频一区| 亚洲国产视频一区二区| 欧美刺激午夜性久久久久久久| 亚洲国产精品电影| 亚洲电影中文字幕| 日韩亚洲在线| 暖暖成人免费视频| 亚洲美女在线视频| 一区二区三区欧美在线观看| 亚洲天堂av高清| 欧美中文字幕第一页| 久久精品日产第一区二区三区| 蜜臀久久99精品久久久久久9| 久久亚洲精品欧美| 欧美日韩一区二区三区在线观看免 | 在线播放日韩专区| 亚洲第一精品久久忘忧草社区| 日韩一级精品| 午夜国产不卡在线观看视频| 免费黄网站欧美| 亚洲电影成人| 亚洲午夜精品在线| 久久精品观看| 欧美日韩国产限制| 国产精品免费网站| 精东粉嫩av免费一区二区三区| 亚洲电影第三页| 性欧美video另类hd性玩具| 久久久久国产一区二区三区| 欧美国产一区在线| 蜜臀av一级做a爰片久久 | 蜜月aⅴ免费一区二区三区| 欧美r片在线| 久色婷婷小香蕉久久| 亚洲精品日韩在线| 久久av老司机精品网站导航| 亚洲天堂av图片| 免费观看一级特黄欧美大片| 欧美日韩伊人| 亚洲欧洲日韩在线| 性欧美video另类hd性玩具| 欧美激情一区二区在线 | 久久久久国色av免费看影院| 欧美大色视频| 亚洲男同1069视频| 久久夜色精品国产亚洲aⅴ| 欧美日韩福利视频| 国产一区二区三区在线观看视频| 一区二区欧美在线观看| 久久国产欧美日韩精品| 一区二区高清在线观看| 久久亚洲精品视频| 国产视频久久久久| 在线中文字幕日韩| 亚洲国产欧美久久| 欧美一区二区黄色| 国产精品久久久久aaaa樱花| 日韩视频中文| 毛片精品免费在线观看| 午夜在线电影亚洲一区| 欧美一级视频精品观看| 久久香蕉国产线看观看网| 男人插女人欧美| 国产欧美一区二区精品忘忧草| 亚洲一区自拍| 一区二区三区四区五区精品视频 | 国产一区成人| 亚洲免费视频成人| 亚洲无线视频| 欧美日韩国产三区| 在线视频欧美日韩精品| 久久天天躁夜夜躁狠狠躁2022|