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

   C++ 技術中心

   :: 首頁 :: 聯系 ::  :: 管理
  160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

公告

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

留言簿(27)

搜索

  •  

最新隨筆

最新評論

評論排行榜

#ifndef _CHECKMEMOVERFLOW_H_
#define _CHECKMEMOVERFLOW_H_

#define CHECK_MEM_OVERFLOW

#ifdef CHECK_MEM_OVERFLOW
//操作系統內存分配粒度為頁面(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]); //程序運行到這里將出現debug中斷
    delete[] a;
    printf("test done\n");
    return 0;
}
#endif
#endif


原理:

1,重載全局new/delete,接管內存申請/釋放;

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

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


注意:

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


使用方法:

只要include這個頭文件即可,且內存必須是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++技術中心 閱讀(1605) 評論(0)  編輯 收藏 引用 所屬分類: C++ STL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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视频一区二区| 狠狠干综合网| 国产精品久久久久久久久久ktv| 亚洲福利在线观看| 亚洲午夜精品久久久久久浪潮 | 亚洲国产精品一区二区尤物区| 先锋影音一区二区三区| 中文av一区特黄| 亚洲欧美国产日韩中文字幕| 亚洲欧美色一区| 亚洲一区二区三区激情| 欧美一区二区三区在线视频| 久久精品91久久香蕉加勒比| 久久最新视频| 国产精品草草| 精品成人在线| 亚洲欧美成人精品| 久久精品一级爱片| 亚洲裸体俱乐部裸体舞表演av| 亚洲欧美日韩一区二区在线 | 久久精品国产免费观看| 久久久久久久高潮| 欧美成人tv| 国产亚洲aⅴaaaaaa毛片| 亚洲国产精品久久| 久久午夜视频| 午夜久久久久久久久久一区二区| 狂野欧美激情性xxxx欧美| 国产精品自拍小视频| 日韩视频免费观看高清在线视频 | 亚洲伦伦在线| 美女啪啪无遮挡免费久久网站| 最新亚洲电影| 老司机免费视频久久| 国产香蕉久久精品综合网| 亚洲永久精品大片| 亚洲精选在线观看| 亚洲一区影音先锋| 久久在线精品| 国产精品五区| 久久久久国产成人精品亚洲午夜| 亚洲国产精品成人综合| 欧美一区二区三区四区视频| 国产美女精品视频免费观看| 亚洲欧美日韩高清| 欧美一级精品大片| 亚洲美女av黄| 亚洲一级特黄| 在线看日韩欧美| 日韩视频免费观看| 激情综合色丁香一区二区| 亚洲电影专区| 国产精品视频1区| 久久综合中文字幕| 国产精品成人免费视频| 亚洲美女视频在线观看| 午夜日韩在线观看| 亚洲你懂的在线视频| 亚洲欧洲综合另类在线| 亚洲国产精品一区二区www在线 | 一区二区三区日韩欧美精品| 国产在线成人| 亚洲国产精彩中文乱码av在线播放| 激情久久久久| 经典三级久久| 午夜视频一区| 午夜国产精品视频| 欧美成人a视频| 精品福利电影| 在线观看亚洲精品| 久久精品一二三区| 久久九九有精品国产23| 欧美日韩国产免费| 久久成人免费日本黄色| 欧美成人国产一区二区| 欧美专区日韩视频| 性做久久久久久| 国产精品久久7| 午夜一区二区三区不卡视频| 久久黄金**| 99精品福利视频| 亚洲欧美日韩精品久久久久| 国产日韩精品一区| 亚洲激情一区| 海角社区69精品视频| 亚洲尤物在线| 欧美在线一级va免费观看| 国产亚洲综合精品| 性娇小13――14欧美| 欧美自拍偷拍| 亚洲黄色成人久久久| 久久精品国产亚洲5555| 亚洲欧美日韩在线不卡| 欧美精品在线免费播放| 久久综合999| 国产欧美一二三区| 一区二区三区www| 欧美一级久久久久久久大片| 国产精品久久夜| 亚洲综合二区| 蜜桃精品久久久久久久免费影院| 亚洲日本成人网| 国产亚洲精品久| 欧美日韩一本到| 狂野欧美激情性xxxx欧美| 久久综合九色综合久99| 国产精品乱码| 亚洲一区二区三区精品在线| 久久久久99| 一区二区免费在线播放| 伊大人香蕉综合8在线视| 欧美日韩三级在线| 免费美女久久99| 亚洲午夜精品在线| 亚洲一区制服诱惑| 免费观看一级特黄欧美大片| 亚洲午夜羞羞片| 亚洲第一黄网| 欧美日韩高清在线| 美女视频黄免费的久久| 欧美在线精品免播放器视频| 亚洲免费在线视频| 久久av资源网| 久久精品五月| 欧美日韩一区综合| 欧美视频一区二区| 欧美高清一区| 久久久91精品国产| 久久精品在线免费观看| 欧美怡红院视频| 久久国产精品黑丝| 欧美freesex交免费视频| 欧美激情精品久久久久久大尺度 | 国内精品久久久久影院色| 欧美国产先锋| 欧美精品一区二区三区久久久竹菊| 久久激情综合| 狂野欧美一区| 欧美精品久久99久久在免费线| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精品一区二区三区一线天视频 | 久久久欧美精品| 免费h精品视频在线播放| 亚洲靠逼com| 欧美aaaaaaaa牛牛影院| 国产自产女人91一区在线观看| 欧美一级淫片播放口| 欧美高清视频一区| 一本色道久久| 久久精视频免费在线久久完整在线看| 亚洲视频图片小说| 久久久天天操| 国产精品区一区二区三| 黑丝一区二区三区| 久久本道综合色狠狠五月| 一区二区三区四区五区精品视频| 欧美综合国产精品久久丁香| 国产精品久久久久久久久久久久久| 亚洲一二三区在线观看| 欧美激情精品久久久久久久变态 | 韩国三级在线一区| 久久久青草婷婷精品综合日韩| 久久婷婷人人澡人人喊人人爽| 欧美日韩三区| 在线综合亚洲| 91久久精品美女高潮| 久久激情五月激情| 国产精品人人做人人爽| 99re视频这里只有精品| 亚洲精品一区二区网址| 国产精品扒开腿做爽爽爽视频 | 亚洲午夜高清视频| 国产精品欧美精品| 猛干欧美女孩| 日韩一级在线| 免费久久99精品国产自在现线| 国外成人性视频| 美女精品在线| 欧美肥婆在线| 欧美一区二区日韩一区二区| 久久久国产91| 一本色道久久加勒比精品| 欧美亚洲视频| 午夜亚洲视频| 国产亚洲成av人片在线观看桃| 欧美在线不卡视频| 老司机一区二区三区| 亚洲女同性videos| 久久蜜臀精品av| 亚洲欧美在线网| 欧美成年人视频网站欧美| 久久福利资源站| 国产主播精品| 久久免费视频在线| 在线视频精品| 噜噜爱69成人精品| 亚洲一区精品视频| 久久午夜精品| 久久综合九色综合久99|