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

   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)

搜索

  •  

最新隨筆

最新評論

評論排行榜

mprotect: 設(shè)置內(nèi)存訪問權(quán)限

mmap 的第三個(gè)參數(shù)指定對內(nèi)存區(qū)域的保護(hù),由標(biāo)記讀、寫、執(zhí)行權(quán)限的 PROT_READ、PROT_WRITE 和 PROT_EXEC 按位與操作獲得,或者是限制沒有訪問權(quán)限的 PROT_NONE。如果程序嘗試在不允許這些權(quán)限的本地內(nèi)存上操作,它將被 SIGSEGV 信號(Segmentation fault,段錯(cuò)誤)終止。

在內(nèi)存映射完成后,這些權(quán)限仍可以被 mprotect 系統(tǒng)調(diào)用所修改。mprotect 的參數(shù)分別為內(nèi)存區(qū)間的地址,區(qū)間的大小,新的保護(hù)標(biāo)志設(shè)置。所指定的內(nèi)存區(qū)間必須包含整個(gè)頁:區(qū)間地址必須和整個(gè)系統(tǒng)頁大小對齊,而區(qū)間長度必須是頁大小的整數(shù)倍。這些頁的保護(hù)標(biāo)記被這里指定的新保護(hù)模式替換。

獲得頁面對齊的內(nèi)存
應(yīng)注意的是, malloc 返回的內(nèi)存區(qū)域通常并不與內(nèi)存頁面對齊,甚至在內(nèi)存的大小是頁大小整數(shù)倍的情況下也一樣。如果您想保護(hù)從 malloc 獲得的內(nèi)存,您不得不分配一個(gè)更大的內(nèi)存區(qū)域并在其中找到一個(gè)與頁對齊的區(qū)間。
您可以選擇使用 mmap 系統(tǒng)調(diào)用來繞過 malloc 并直接從 Linux 內(nèi)核中分配頁面對齊內(nèi)存。

mmap通過映射 /dev/zero 來分配內(nèi)存頁。內(nèi)存將被初始化為可讀和可寫模式。

int fd = open (“/dev/zero”, O_RDONLY);
char* memory = mmap (NULL, page_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
close (fd);

然后,您的程序可以使用 mprotect 把它變成只讀:

mprotect (memory, page_size, PROT_READ);

有一種監(jiān)控內(nèi)存訪問的高級技巧,可以通過利用 mmap 和 mprotect 保護(hù)目標(biāo)內(nèi)存區(qū)間,然后當(dāng)程序訪問時(shí)候接收并處理 Linux 系統(tǒng)發(fā)送的 SIGSEGV 信號。代碼 展示了這個(gè)技巧。

代碼使用mprotect檢測內(nèi)存訪問

#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

static int alloc_size;
static char* memory;

void segv_handler (int signal_number)
{
  printf (“memory accessed!\n”);
  mprotect (memory, alloc_size, PROT_READ | PROT_WRITE);
}

int main ()
{
  int fd;
  struct sigaction sa;

  /* 初始化segv_handler為SIGSEGV的句柄。*/
  memset (&sa, 0, sizeof (sa));
  sa.sa_handler = &segv_handler;
  sigaction (SIGSEGV, &sa, NULL);

  /* 使用映射/dev/zero分配內(nèi)存頁。最初映射的內(nèi)存為只寫。*/
  alloc_size = getpagesize ();
  fd = open (“/dev/zero”, O_RDONLY);
  memory = mmap (NULL, alloc_size, PROT_WRITE, MAP_PRIVATE, fd, 0);
  close (fd);
  /* 寫頁來獲得一個(gè)私有復(fù)制。 */
  memory[0] = 0;
  /* 使內(nèi)存為不可寫。 */
  mprotect (memory, alloc_size, PROT_NONE);

  /* 寫分配內(nèi)存區(qū)域。 */
  memory[0] = 1;
  /* 所有工作都結(jié)束;unmap內(nèi)存映射。 */
  printf (“all done\n”);
  munmap (memory, alloc_size);

  return 0;
}

上述程序按照如下步驟執(zhí)行:

  1. 程序?yàn)?SIGSEGV 建立一個(gè)信號處理句柄。
  2. 程序通過映射 /dev/zero 分配一個(gè)內(nèi)存分頁,然后通過寫入數(shù)據(jù)的方式獲得一個(gè)私有復(fù)本。
  3. 程序通過調(diào)用帶 PROT_NONE 權(quán)限的 mprotect 保護(hù)了內(nèi)存。
  4. 當(dāng)程序在后續(xù)執(zhí)行中寫入內(nèi)存時(shí),Linux 向進(jìn)程發(fā)送 SIGSEGV,這個(gè)信號被 segv_handler 句柄接收處理。這個(gè)句柄將解除內(nèi)存保護(hù),因而程序內(nèi)存訪問得以繼續(xù)。
  5. 當(dāng)信號句柄執(zhí)行完成時(shí),程序控制權(quán)返回 main 函數(shù),程序?qū)⑹褂?munmap 來釋放內(nèi)存。
posted on 2013-06-27 10:05 C++技術(shù)中心 閱讀(3365) 評論(0)  編輯 收藏 引用 所屬分類: Linux 編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产午夜精品一区二区三区视频| 欧美在线观看视频| 亚洲电影免费观看高清| 亚洲主播在线播放| 亚洲精品久久久久| 久久精品二区亚洲w码| 欧美午夜剧场| 亚洲自拍偷拍福利| 亚洲精品日韩综合观看成人91| 亚洲欧美日韩国产综合在线| 亚洲黄网站黄| 欧美黄色影院| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲欧美日本伦理| 亚洲欧洲在线视频| 久热这里只精品99re8久| 娇妻被交换粗又大又硬视频欧美| 国产美女一区| 日韩亚洲欧美一区二区三区| 欧美小视频在线观看| 亚洲无玛一区| 国产精品久久久久久久久免费桃花| 欧美日韩一区在线播放| 亚洲人成欧美中文字幕| 亚洲高清自拍| 欧美日韩一区二区三区在线 | 狠狠综合久久av一区二区小说 | 西瓜成人精品人成网站| 亚洲乱码国产乱码精品精98午夜| 久久久久99精品国产片| 亚洲一区尤物| 国产美女精品在线| 免费亚洲电影在线| 欧美精品乱码久久久久久按摩| 国产精品国产三级国产aⅴ9色| 国产精品久久久久久妇女6080| 国产精品乱码妇女bbbb| 亚洲午夜高清视频| 欧美制服丝袜| 久久影院午夜论| 欧美一区二区三区日韩视频| 亚洲大片av| 国产精品99久久久久久久久久久久| 亚洲欧美在线视频观看| 羞羞色国产精品| 久久综合五月| 欧美视频一区二区三区…| 国产情侣久久| 亚洲专区在线视频| 亚洲黄色三级| 亚洲永久免费精品| 亚洲精品国产品国语在线app| 一本色道久久综合亚洲精品小说| 欧美一区二区三区免费观看视频| 久久伊人亚洲| 欧美国产日本| 久久久久久69| 欧美色图五月天| 老**午夜毛片一区二区三区| 国产精品久久久久9999高清| 久久久之久亚州精品露出| 欧美高清自拍一区| 久久久噜噜噜久噜久久| 亚洲午夜在线观看| 1024国产精品| 亚洲欧美日韩另类| 欧美日本国产| 麻豆国产精品777777在线| 国产精品久久久亚洲一区| 亚洲手机在线| 久久免费视频这里只有精品| 国产无遮挡一区二区三区毛片日本| 在线视频中文亚洲| 久久久精彩视频| 欧美黄色免费| 久久久蜜桃一区二区人| 欧美一区二区三区精品| 欧美午夜视频网站| 亚洲啪啪91| 亚洲人在线视频| 老司机久久99久久精品播放免费| 国产一区二区精品久久| 亚洲少妇自拍| 亚洲一区二区视频在线| 一区二区三欧美| **网站欧美大片在线观看| 免费观看久久久4p| 久久久久久国产精品一区| 久久国产黑丝| 国产在线精品二区| 欧美一区二区三区视频免费| 久久精品麻豆| 国内精品久久久久久| 久久精品国产免费观看| 久久夜色精品国产欧美乱| 韩国福利一区| 久久亚洲视频| 欧美韩日视频| 日韩视频精品在线观看| 欧美人与禽猛交乱配视频| 亚洲一区二区3| 欧美性色综合| 亚洲一区在线观看视频 | 国产日韩欧美日韩大片| 亚洲性视频网址| 久久久久欧美精品| 亚洲大片一区二区三区| 美女主播一区| 一本大道久久a久久精品综合| 亚洲美女精品久久| 亚洲调教视频在线观看| 亚洲欧美日韩国产中文在线| 香蕉久久夜色精品国产| 国产一区二区三区视频在线观看| 免费观看不卡av| 91久久综合亚洲鲁鲁五月天| 欧美日韩一区二区视频在线观看| 性感少妇一区| 久久夜色精品国产欧美乱极品| 一区二区三区亚洲| 老司机午夜精品视频在线观看| 国产精品99久久久久久宅男| 欧美丝袜一区二区| 欧美一区二区在线免费观看| 日韩视频在线观看一区二区| 国产精品福利片| 久久一区二区三区四区五区| 亚洲精选在线| 久久裸体艺术| 亚洲午夜一区二区三区| 久久九九免费视频| 91久久精品一区二区三区| 午夜精品福利电影| 欧美mv日韩mv国产网站app| 亚洲精品小视频在线观看| 午夜天堂精品久久久久| 欧美精彩视频一区二区三区| 中文av一区二区| 亚洲福利视频一区| 久久电影一区| 亚洲夜间福利| 欧美精品手机在线| 欧美日本二区| 欧美怡红院视频一区二区三区| 欧美成人r级一区二区三区| 一本一本久久a久久精品综合麻豆| 在线日本高清免费不卡| 欧美日韩亚洲另类| 久久精品国产亚洲高清剧情介绍| 午夜精品福利在线观看| 亚洲第一在线综合网站| 久久精品导航| 中文精品视频一区二区在线观看| 在线视频欧美一区| 亚洲国内在线| 国外精品视频| 国产区在线观看成人精品| 欧美日韩在线一区| 欧美久久婷婷综合色| 久久青草久久| 欧美一区二区三区视频| 午夜在线a亚洲v天堂网2018| 一区二区三区日韩精品| 日韩视频一区二区在线观看 | 久久综合给合久久狠狠色 | 国产精品久久福利| 久久久最新网址| 亚洲在线观看免费| 欧美午夜视频在线观看| 欧美韩日一区二区| 欧美国产视频在线观看| 嫩模写真一区二区三区三州| 久久美女艺术照精彩视频福利播放| 另类天堂av| 黄色亚洲精品| 国产女优一区| 久久久人成影片一区二区三区观看 | 狠狠88综合久久久久综合网| 国产精品一区免费在线观看| 午夜精品久久久久久久99水蜜桃| 亚洲欧美日韩爽爽影院| 国产精品一区免费在线观看| 国产精品白丝av嫩草影院 | 日韩视频一区二区在线观看| 亚洲日本乱码在线观看| 亚洲国产美女精品久久久久∴| 99精品黄色片免费大全| 亚洲人午夜精品| 一区二区精品| 亚洲欧美日韩国产成人| 亚洲欧美日韩国产综合精品二区| 国产在线精品二区| 免费看亚洲片| 亚洲三级性片| 99国内精品久久| 麻豆成人av| 亚洲高清资源综合久久精品| 99国产精品久久久久久久久久| 玖玖视频精品| 亚洲成人资源网|