Linux中mprotect()函数的用法

Linux 专栏收录该内容
30 篇文章 3 订阅
在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,段错误)信号,并且终止该进程。

  • 9
    点赞
  • 1
    评论
  • 16
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

Teleport Ultra 所能做的,不仅仅是离线浏览某个网页 (让你离线快速浏览某个网页的内容当然是它的一项重要功能),它可以从 Internet 的任何地方抓回你想要的任何文件,它可以在你指定的时间自动登录到你指定的网站下载你指定的内容,你还可以用它来创建某个网站的完整的镜象,作为创建你自己的网站的参考。 如果你也和我一样,曾想把整个网页抓回来慢慢欣赏,如果你也曾像我一样,费尽千辛万苦只为了重复抓取同一网站的文件而做一些机械性的动作,Teleport Ultra 简直是我们的救星!它可以迅速、确实地将整个网站复制在你的硬盘,为您节省大笔的上网费用与时间。 Teleport Ultra 是著名的离线浏览软件 Teleport Pro 版本的增强版! 更新记录: 1.新增了一项功能,使得该软件的Ultra, VLX, Exec, Exec/VLX版可以打开比较小的项目 2.新增了可以在UNC卷上运行项目的功能 3.在Exec和Exec/VLX版本新增了API命令 4.更新了所有版本的文档 5.改进了脚本,可以处理更多的脚本命令 6.改进了规则引擎 7.修正了会取回一些不需要的URL的bug 8.重新设置了Ultra版的试用期 Pro 与 Ultra 的不同 更大的项目数据库 Pro 在项目数据库,最大只能维持到 65,000 网址。Ultra 则可以到 250,000 网址。能够更方便的,在单一方案处理更多数据。 增强的启始地址特性: Ultra 有两个额外的网址特性,加入新网址时或编辑时,可使用「包含」与「别名」功能。 增强的方案特性: 包括「同步化本地网站」「借用 Cookies」「自定义 http 标题」 其它功能: 电子邮件、导入启始网址、更短的启始网址、按次序执行、删除失效文件、导出首页,功能不胜枚举。
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值