返回列表 发新帖

mprotect函数简介

[复制链接]

39

主题

349

回帖

1676

积分

高中生

Rank: 4

金币
643
好评
11
信誉
125

考神MT论坛新人MT论坛最佳新人

发表于 2022-12-19 12:05:50 | 显示全部楼层 | 阅读模式  来自 江苏
本帖最后由 ggggmllll 于 2022-12-19 12:16 编辑


萌新初学此函数,如有不对之处,请多多指教


在Linux中,mprotect()函数可以用来修改一段指定内存区域的保护属性

函数原型如下:
  1. #include <unistd.h>

  2. #include <sys/mmap.h>

  3. int mprotect(const void *start, size_t len, int prot);
复制代码

函数作用:把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。

prot可以取以下几个值,并且可以用“|”将几个属性合起来使用:

PROT_READ:表示内存段内的内容可写

PROT_WRITE:表示内存段内的内容可读

PROT_EXEC:表示内存段中的内容可执行

PROT_NONE:表示内存段中的内容不具有任何权限

指定的内存区间必须包含整个内存页(4K)区间开始的地址start必须是一个内存页的起始地址,并且区间长度len必须是页大小的整数倍

可用sysconf函数获取pagesize,用memalign函数申请地址是pagesize整数倍的内存块
  1. int pagesize = sysconf(_SC_PAGE_SIZE);
  2. if (pagesize == -1)
  3. {
  4. perror("sysconf");
  5. }
复制代码
如果执行成功,则返回0;如果执行失败,则返回-1,并且设置errno变量,说明具体因为什么原因造成调用失败。错误的原因主要有以下几个:
①EACCES

该内存不能设置为相应权限。这是可能发生的

比如,如果你 mmap 映射一个文件为只读的,接着使用 mprotect() 标志为 PROT_WRITE

②EINVAL

start 不是一个有效的指针,指向的不是某个内存页的开头

③ENOMEM

内核内部的结构体无法分配

④ENOMEM

进程的地址空间在区间 [start, start+len] 范围内是无效,或者有一个或多个内存页没有映射。

如果调用进程内存访问行为侵犯了这些设置的保护属性,内核会为该进程产生 SIGSEGV (Segmentation fault,段错误)信号,并且终止该进程

回复

使用道具 举报

39

主题

349

回帖

1676

积分

高中生

Rank: 4

金币
643
好评
11
信誉
125

考神MT论坛新人MT论坛最佳新人

发表于 2022-12-19 12:17:21 | 显示全部楼层  来自 江苏
沙发归楼主
回复

使用道具 举报

13

主题

4071

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4566
好评
23
信誉
152

MT论坛新人MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

发表于 2022-12-19 12:30:48 来自手机  | 显示全部楼层  来自 湖南
支持一下
回复

使用道具 举报

41

主题

3248

回帖

9145

积分

硕士生

睡觉

Rank: 6Rank: 6

金币
1276
好评
45
信誉
130

考神

QQ
发表于 2022-12-19 13:15:13 来自手机  | 显示全部楼层  来自 江西
支持一下
回复

使用道具 举报

2

主题

5826

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
3569
好评
1
信誉
96
发表于 2022-12-19 13:15:29 | 显示全部楼层  来自 湖北
学习学习。支持。
回复

使用道具 举报

0

主题

152

回帖

492

积分

初中生

Rank: 3Rank: 3

金币
555
好评
0
信誉
100
发表于 2022-12-19 13:26:51 来自手机  | 显示全部楼层  来自 山东
看起来好难
回复

使用道具 举报

0

主题

2976

回帖

7010

积分

硕士生

Rank: 6Rank: 6

金币
2394
好评
0
信誉
100
发表于 2023-3-14 15:20:39 | 显示全部楼层  来自 浙江
感谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表