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

   C++ 技術中心

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

公告

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

留言簿(27)

搜索

  •  

最新隨筆

最新評論

評論排行榜

mprotect: 設置內存訪問權限

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

在內存映射完成后,這些權限仍可以被 mprotect 系統調用所修改。mprotect 的參數分別為內存區間的地址,區間的大小,新的保護標志設置。所指定的內存區間必須包含整個頁:區間地址必須和整個系統頁大小對齊,而區間長度必須是頁大小的整數倍。這些頁的保護標記被這里指定的新保護模式替換。

獲得頁面對齊的內存
應注意的是, malloc 返回的內存區域通常并不與內存頁面對齊,甚至在內存的大小是頁大小整數倍的情況下也一樣。如果您想保護從 malloc 獲得的內存,您不得不分配一個更大的內存區域并在其中找到一個與頁對齊的區間。
您可以選擇使用 mmap 系統調用來繞過 malloc 并直接從 Linux 內核中分配頁面對齊內存。

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

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);

有一種監控內存訪問的高級技巧,可以通過利用 mmap 和 mprotect 保護目標內存區間,然后當程序訪問時候接收并處理 Linux 系統發送的 SIGSEGV 信號。代碼 展示了這個技巧。

代碼使用mprotect檢測內存訪問

#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分配內存頁。最初映射的內存為只寫。*/
  alloc_size = getpagesize ();
  fd = open (“/dev/zero”, O_RDONLY);
  memory = mmap (NULL, alloc_size, PROT_WRITE, MAP_PRIVATE, fd, 0);
  close (fd);
  /* 寫頁來獲得一個私有復制。 */
  memory[0] = 0;
  /* 使內存為不可寫。 */
  mprotect (memory, alloc_size, PROT_NONE);

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

  return 0;
}

上述程序按照如下步驟執行:

  1. 程序為 SIGSEGV 建立一個信號處理句柄。
  2. 程序通過映射 /dev/zero 分配一個內存分頁,然后通過寫入數據的方式獲得一個私有復本。
  3. 程序通過調用帶 PROT_NONE 權限的 mprotect 保護了內存。
  4. 當程序在后續執行中寫入內存時,Linux 向進程發送 SIGSEGV,這個信號被 segv_handler 句柄接收處理。這個句柄將解除內存保護,因而程序內存訪問得以繼續。
  5. 當信號句柄執行完成時,程序控制權返回 main 函數,程序將使用 munmap 來釋放內存。
posted on 2013-06-27 10:05 C++技術中心 閱讀(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>
            亚洲激情电影在线| 亚洲激情二区| 国产日产欧美一区| 国产精品99久久久久久www| 亚洲女女女同性video| 亚洲高清视频一区二区| 国产精品综合视频| 欧美a一区二区| 国产日韩欧美a| 国产视频一区三区| 99视频精品免费观看| 亚洲第一页中文字幕| 欧美一区二区三区另类| 99国产一区| 欧美精品在线视频观看| 国产日韩欧美日韩大片| 欧美午夜精品久久久久免费视| 激情综合激情| 欧美性猛片xxxx免费看久爱| 日韩视频永久免费| 国产精品久久久久9999高清| 亚洲国产精品美女| 麻豆久久婷婷| 裸体一区二区三区| 精品成人一区二区三区| 久久久久久**毛片大全| 久久裸体艺术| 日韩一区二区福利| 免费黄网站欧美| 亚洲精品老司机| 亚洲大胆人体在线| 91久久嫩草影院一区二区| 欧美aaa级| 亚洲国产日韩综合一区| 最新成人av在线| 欧美日韩国产首页| 久久久亚洲欧洲日产国码αv| 国产一区二区三区四区在线观看| 亚洲欧美激情四射在线日 | 久久精品国产99国产精品澳门| 欧美日韩国产不卡| 夜色激情一区二区| 亚洲最新视频在线| 欧美国产精品va在线观看| 亚洲高清在线视频| 久久综合久久久| 亚洲综合视频一区| 亚洲五月婷婷| 一本久久综合| 亚洲五月六月| 欧美成人亚洲| 日韩小视频在线观看| 国产一区二区三区在线观看免费视频 | 国产精品美腿一区在线看 | 日韩视频中文字幕| 久久黄色网页| 国产精品久久久久久超碰| 在线成人www免费观看视频| 亚洲一区二区少妇| 噜噜噜噜噜久久久久久91| 日韩午夜激情| 欧美成人综合| 永久域名在线精品| 欧美在线一区二区| 一本色道久久88综合日韩精品| 久久精品二区三区| 欧美激情1区2区| 日韩视频精品| 亚洲国产天堂久久综合网| 欧美在线视频一区| 国产欧美日韩免费| 亚洲美女诱惑| 亚洲国产高清高潮精品美女| 欧美在线一二三区| 国产日韩三区| 欧美在线观看一区| 亚洲一区二区高清| 国产精品国产三级国产普通话蜜臀 | 欧美精品尤物在线| 亚洲精品资源| 亚洲国产专区| 欧美日韩国产成人在线观看| 亚洲精品国产视频| 亚洲高清免费| 欧美激情视频免费观看| 亚洲欧洲在线看| 亚洲国产精品福利| 欧美日韩亚洲一区二区三区| 免费观看欧美在线视频的网站| 一片黄亚洲嫩模| 欧美视频中文一区二区三区在线观看 | 欧美黄色成人网| 黄色av日韩| 亚洲日本电影在线| 亚洲国产精品123| 欧美黄色免费网站| 正在播放欧美视频| 日韩一区二区精品| 国产精品99一区二区| 亚洲欧美bt| 欧美一级欧美一级在线播放| 国产专区欧美专区| 欧美国产日本在线| 另类天堂视频在线观看| 亚洲欧洲在线免费| 一区二区三区免费观看| 国产欧美精品一区| 美女国产一区| 欧美日韩第一区日日骚| 欧美一区二区三区在线免费观看| 亚洲综合色在线| 国产精品毛片| 免费成人网www| 欧美激情区在线播放| 亚洲伊人观看| 久久一区二区精品| 亚洲天堂成人| 美女视频网站黄色亚洲| 中文欧美日韩| 久久综合国产精品| 香港久久久电影| 免费欧美日韩国产三级电影| 一本大道久久a久久精二百| 亚洲综合色婷婷| 99国内精品久久| 亚洲一区网站| 国产欧美一区二区三区在线老狼| 你懂的亚洲视频| 国产精品欧美风情| 欧美多人爱爱视频网站| 国产乱码精品| 亚洲国内高清视频| 狠狠入ady亚洲精品经典电影| 亚洲欧洲一区二区天堂久久| 国产视频丨精品|在线观看| 裸体一区二区三区| 免费在线播放第一区高清av| 亚洲综合不卡| 久久美女性网| 亚洲美女电影在线| 亚洲网址在线| 亚洲视频免费看| 午夜伦理片一区| 亚洲欧美成人网| 欧美怡红院视频| 午夜久久久久| 亚洲欧洲日本专区| 免费在线欧美黄色| 国产视频在线一区二区| 一区二区欧美激情| 中文一区在线| 国产精品福利网| 欧美 亚欧 日韩视频在线| 久久人人精品| 久久噜噜噜精品国产亚洲综合| 国产精品综合视频| 午夜精品剧场| 欧美国产视频日韩| 一区二区电影免费观看| 国产精品久久久久毛片软件| 亚洲欧美在线磁力| 欧美大尺度在线观看| 在线亚洲免费| 国产视频综合在线| 欧美高清日韩| 午夜精品国产精品大乳美女| 蜜桃av噜噜一区二区三区| 一区二区冒白浆视频| 国产欧美日韩视频一区二区三区| 久久久久久亚洲精品中文字幕 | 一区二区三区四区国产精品| 国产嫩草影院久久久久| 久久亚洲精品欧美| 亚洲图片欧洲图片av| 蜜臀av性久久久久蜜臀aⅴ| 亚洲色在线视频| 在线成人激情| 国产精品视频yy9099| 久久美女性网| 亚洲欧美视频在线观看| 亚洲区国产区| 欧美aaa级| 欧美在线视频观看免费网站| 亚洲精品美女91| 狠狠久久综合婷婷不卡| 国产精品卡一卡二| 欧美精品www| 免费亚洲视频| 久久午夜色播影院免费高清| 亚洲欧美成人网| 一区二区高清| 亚洲欧洲在线看| 亚洲第一精品福利| 久久久水蜜桃| 欧美一区日韩一区| 9人人澡人人爽人人精品| 亚洲电影成人| 一区二区三区在线高清| 国产嫩草一区二区三区在线观看| 欧美日韩一区在线观看视频|