MPROTECT

Section: ¸®´ª½º ÇÁ·Î±×·¡¸Ó ¸Å´º¾ó (2)
Updated: 1997³â 05¿ù 31ÀÏ
Index
Return to Main Contents
 

À̸§

mprotect - ¸Þ¸ð¸® ¿µ¿ª¿¡ ´ëÇÑ Á¢±Ù¸¦ Á¦¾îÇÑ´Ù.  

»ç¿ë¹ý

#include <sys/mman.h>

int mprotect(const void *addr, size_t len, int prot);
 

¼³¸í

mprotect´Â ¸Þ¸ð¸® ¿µ¿ª¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦¾îÇÑ´Ù. ¸¸ÀÏ ±× ¿µ¿ªÀ» º¸È£Çϱâ À§ÇØ Á¢±ÙÀÌ Çã¿ëµÇÁö ¾Ê´Â´Ù¸é, ÇÁ·Î±×·¥Àº SIGSEGV¸¦ ¹Þ´Â´Ù.

prot´Â ´ÙÀ½ °ªµéÀÇ ºñÆ® ORÀÌ´Ù:

PROT_NONE
¸Þ¸ð¸®¸¦ Á¢±ÙÇÒ ¼ö ¾ø´Ù.
PROT_READ
¸Þ¸ð¸®¸¦ ÀÐÀ» ¼ö ÀÖ´Ù.
PROT_WRITE
¸Þ¸ð¸®¸¦ ¾µ ¼ö ÀÖ´Ù.
PROT_EXEC
¸Þ¸ð¸®¿¡ ½ÇÇà Äڵ带 µÑ ¼ö ÀÖ´Ù.

»õ·Î ¼³Á¤ÇÑ º¸È£ ¸ðµå´Â ±âÁ¸ÀÇ º¸È£ ¸ðµå¸¦ ´ëüÇÑ´Ù. ¿¹¸¦ µé¾î, ÀÌÀü¿¡ ¸Þ¸ð¸®°¡ PROT_READ·Î Ç¥½ÃµÇ¾î Àִµ¥, mprotect°¡ prot¸¦ PROT_WRITE·Î È£ÃâµÈ´Ù¸é, ±× ¿µ¿ªÀº ´õ ÀÌ»ó Àбâ Àü¿ëÀÌ ¾Æ´Ï´Ù.  

¹Ýȯ°ª

¼º°ø½Ã, mprotect´Â 0À» ¸®ÅÏÇÑ´Ù. ¿¡·¯½Ã, -1ÀÌ ¸®ÅϵǸç, errno´Â Àû´çÇÑ °ªÀ¸·Î ¼³Á¤µÈ´Ù.  

¿¡·¯

EINVAL
addr°¡ À¯È¿ÇÑ Æ÷ÀÎÅÍ°¡ ¾Æ´Ï°Å³ª, ¶Ç´Â PAGESIZEÀÇ ¹è¼ö°¡ ¾Æ´Ï´Ù.
EFAULT
¸Þ¸ð¸®¸¦ Á¢±ÙÇÒ ¼ö ¾ø´Ù.
EACCES
¸Þ¸ð¸®°¡ ÁöÁ¤µÈ ¸ðµå·Î ¼³Á¤µÉ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î, Àбâ Àü¿ë Á¢±ÙÀ» Çϵµ·Ï ÆÄÀÏÀ» mmap(2) Çߴµ¥ mprotect°¡ PROT_WRITE¸¦ ¿äûÇÒ ¶§ ¹ß»ýÇÑ´Ù.
ENOMEM
³»ºÎ Ä¿³Î ±¸Á¶Ã¼¸¦ ÇÒ´çÇÒ ¼ö ¾ø´Ù.
 

¿¹Á¦

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mman.h>

#include <limits.h>    /* PAGESIZE ¶§¹®¿¡ */
#ifndef PAGESIZE
#define PAGESIZE 4096
#endif

int
main(void)
{
    char *p;
    char c;

    /* ¹öÆÛ¸¦ ÇÒ´çÇÑ´Ù; ±âº»ÀûÀ¸·Î PROT_READ|PROT_WRITE
           º¸È£ ¸ðµå·Î ¼³Á¤µÈ´Ù. */
    p = malloc(1024+PAGESIZE-1);
    if (!p) {
        perror("Couldn't malloc(1024)");
        exit(errno);
    }

        /* PAGESIZEÀÇ ¹è¼ö°¡ µÇµµ·Ï Á¤·Ä; 2ÀÇ Á¦°öÀ¸·Î °¡Á¤ÇÑ´Ù. */
    p = (char *)(((int) p + PAGESIZE-1) & ~(PAGESIZE-1));

    c = p[666];         /* Àбâ; ok */
    p[666] = 42;        /* ¾²±â; ok */

        /* ¹öÆÛ¸¦ Àбâ Àü¿ëÀ¸·Î ÇÑ´Ù. */
    if (mprotect(p, 1024, PROT_READ)) {
        perror("Couldn't mprotect");
        exit(errno);
    }

    c = p[666];         /* Àбâ; ok */
    p[666] = 42;        /* ¾²±â; ÇÁ·Î±×·¥Àº SIGSEGV·Î Á״´Ù. */

    exit(0);
}
 

ȣȯ

SVr4, POSIX.1b (°ø½ÄÀûÀ¸·Î POSIX.4). SVr4´Â EAGAIN ¿¡·¯ ÄÚµåÀ» Ãß°¡ÀûÀ¸·Î Á¤ÀÇÇÑ´Ù. SVr4 ¿¡·¯ Á¶°ÇÀº ¸®´ª½º¿Í Á¤È®È÷ ´ëÀÀµÇÁö´Â ¾Ê´Â´Ù. POSIX.1b¿¡¼­´Â mprotect´Â mmap(2)À¸·Î È®º¸ÇÑ ¸Þ¸ð¸® ¿µ¿ª¿¡¼­¸¸ »ç¿ëµÉ ¼ö ÀÖ´Ù°í ¸»ÇÑ´Ù.  

°ü·Ã Ç׸ñ

mmap(2)  

¿ªÀÚ

Á¤°­ÈÆ <skyeyes@soback.kornet.net>, 2000³â 5¿ù 15ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
¹Ýȯ°ª
¿¡·¯
¿¹Á¦
ȣȯ
°ü·Ã Ç׸ñ
¿ªÀÚ

This document was created by man2html, using the manual pages.
Time: 08:07:00 GMT, March 25, 2004