1. 程式人生 > >Linux中mprotect()函式的用法

Linux中mprotect()函式的用法

在Linux中,mprotect()函式可以用來修改一段指定記憶體區域的保護屬性。

函式原型如下:

#include <unistd.h>
#include <sys/mmap.h>
int mprotect(const void *start, size_t len, int prot);

mprotect()函式把自start開始的、長度為len的記憶體區的保護屬性修改為prot指定的值。

prot可以取以下幾個值,並且可以用“|”將幾個屬性合起來使用:

1)PROT_READ:表示記憶體段內的內容可寫;

2)PROT_WRITE:表示記憶體段內的內容可讀;

3)PROT_EXEC:表示記憶體段中的內容可執行;

4)PROT_NONE:表示記憶體段中的內容根本沒法訪問。

需要指出的是,指定的記憶體區間必須包含整個記憶體頁(4K)。區間開始的地址start必須是一個記憶體頁的起始地址,並且區間長度len必須是頁大小的整數倍。

如果執行成功,則返回0;如果執行失敗,則返回-1,並且設定errno變數,說明具體因為什麼原因造成呼叫失敗。錯誤的原因主要有以下幾個:

1)EACCES

該記憶體不能設定為相應許可權。這是可能發生的,比如,如果你 mmap(2) 對映一個檔案為只讀的,接著使用 mprotect() 標誌為 PROT_WRITE。

2)EINVAL

start 不是一個有效的指標,指向的不是某個記憶體頁的開頭。

3)ENOMEM

核心內部的結構體無法分配。

4)ENOMEM

程序的地址空間在區間 [start, start+len] 範圍內是無效,或者有一個或多個記憶體頁沒有對映。 

如果呼叫程序記憶體訪問行為侵犯了這些設定的保護屬性,核心會為該程序產生 SIGSEGV (Segmentation fault,段錯誤)訊號,並且終止該程序。

相關推薦

Linuxmprotect()函式用法

在Linux中,mprotect()函式可以用來修改一段指定記憶體區域的保護屬性。函式原型如下: #include <unistd.h> #include <sys/mmap.h> int mprotect(const void *start, s

sprintf snprintf的用法 可以作為linuxitoa函式的補充

這樣,一個整數的16 進位制字串就很容易得到,但我們在列印16 進位制內容時,通常想要一種左邊補0 的等寬格式,那該怎麼做呢?很簡單,在表示寬度的數字前面加個0 就可以了。sprintf(s, "%08X", 4567); //產生:"000011D7"上面以”%d”進行的10 進位制列印同樣也可以使用這種左

linuxstat()函式與st_mode用法

標頭檔案:#include <sys/stat.h>   #include <unistd.h> 定義函式:int stat(const char * file_name, struct stat *buf);函式說明:stat()用來將引數file

Linuxwaitpid()函式用法

大家知道,當用fork啟動一個新的子程序的時候,子程序就有了新的生命週期,並將在其自己的地址空間內獨立執行。但有的時候,我們希望知道某一個自己建立的子程序何時結束,從而方便父程序做一些處理動作。同樣的,在用ptrace去attach一個程序滯後,那個被attach的程序某種

Linuxsudo的用法

ber code als 安裝 有效 ould using span 帶來 在linux中的用戶只有2種:root和非root。而非root即普通用戶的權限非常低,基本處理自己的home目錄,其他好多地方連查看的權利也沒有,更不要說安裝軟件了。 為了避免來回切換root,l

Linuxfind的用法

查找1、使用find命令可以解決,find語法如下:find命令選項-name:按照文件名查找文件。-perm:按照文件權限來查找文件。-prune:使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那麽-prune將被find命令忽略。-user: 按照文件屬主來查找文件

linux的if用法和簡單的循環

linux if if用法來一波今天來一波在linux總if的簡單用法,實用與否還需要自己來判定。上一次在for中沒有提及shell腳本中格式問題,今天來補一下如若知道的,略過就好。。。在linux中,shell開頭一般是很重要的,但是卻又都是註釋要不要都行!這是為什麽呢?在上圖中顯示第一行#!/bin/ba

linuxwc命令用法

字節 統計字符 -- 幫助信息 linux系統 count 沒有 標準 讀取 Linux系統中的wc(Word Count)命令的功能為統計指定文件中的字節數、字數、行數,並將統計結果顯示輸出。 1.命令格式: wc [選項]文件... 2.命令功能: 統計指定文件中的字節

Linuxfind常見用法示例

depth 需要 option 為什麽 語法 其他 文件訪問 this man Linux中find常見用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; fi

Linuxiptables的用法

iptables linux iptables 防火墻 1 iptablesiptables命令用於創建數據過濾與NAT規則,在iptables命令中設置數據過濾或處理數據包的策略叫做規則,將多個規則合成一個鏈。1.1 iptables的控制類型ACCEPT:允許通過LOG:記錄日誌信息,然後傳給

linuxgrep的用法

grep1、grep [內容] /data/boy 只顯示該文件中的內容,其他不顯。grep一般常用參數: - i :匹配時忽略大小寫 - n :匹配的內容開頭顯示行號 - v : 匹配沒有"搜索字符串"的內容,即過濾匹配內容 --color=auto

Linuxsed的用法

sed1、sed 流編輯器,實現對文字的增刪改替換查,能同時處理多個文件多行的內容,可以不對原文件改動,把整個文件輸入到屏幕,可以把只匹配到模式的內容輸入到屏幕上。還可以對原文件改動,但是不會再屏幕上返回結果。2、命令格式:sed [選項] ‘[命令]’[文件]sed命令的常用選項:-n :只打印模式

linux 特殊符號用法詳解

引號 zabbix 目錄 sele cond 特殊符號 zab set speed 星號(*) 當用於shell變量時, [root@zabbix_nuc ~]# sql=‘select * from mysql.user‘ [root@zabbix_nuc ~]# ech

Linux的括號用法

結果 數值 條件 匹配模式 初始化 技術分享 最長 file 算術 一、Linux中的小括號(也叫圓括號)“( )”的用法 1.單小括號() 1)數組賦值或者初始化數組; 2)子Shell賦值:小括號中的內容會開啟一個子shell獨立運行;括號中以分號連接,最後一個命令不需

linuxtar命令用法

log mco file 並且 unrar 過程 lin 文件名 壓縮歸檔 -c: 建立壓縮檔案-x:解壓-t:查看內容-r:向壓縮歸檔文件末尾追加文件-u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的參數是

numpyflatten()函式用法

flatten是numpy.ndarray.flatten的一個函式,其官方文件是這樣描述的: ndarray.flatten(order='C') Return a copy of the array collapsed into one dimension. Parameters:

Pythonsplit()函式用法和例項

一、描述 split()通過指定分隔符對字串進行切片,如果引數num 有指定值,則僅分隔 num 個子字串 函式形式:str.split(str="", num=string.count(str)) 引數: str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、製表

Linuxwait()函式

  程式設計過程中,有時需要讓一個程序等待另一個程序,最常見的是父程序等待自己的子程序,或者父程序回收自己的子程序資源包括殭屍程序。這裡簡單介紹一下系統呼叫函式:wait() 函式原型是 #include <sys/types.h> #include <w

linuxalarm函式和pause函式詳解例項

轉載原文:https://www.cnblogs.com/yxk529188712/p/4982401.html alarm(time);執行之後告訴核心,讓核心在time秒時間之後向該程序傳送一個定時訊號,然後該程序捕獲該訊號並處理; pause()函式使該程序暫停讓出CPU,但是該函式的暫停

linux之select函式用法詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!