浅谈mprotect函数和mmap函数

Linux中mprotect()函数详解 测试源码 //mmp.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h> int *g_ps32Result; void add(int a, int b) { *g_ps32Result = a + b; } void s... 阅读详情

mprotect函数

在Linux中,mprotect()函数可以用来修改一段指定内存区域的权限。

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

细说参数

一句话

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

注意几点:

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

 mmap函数

首先了解内存映射:

内存映射:(可以类别数学中函数的映射关系,抽象类比的理解这种关系或者说是过程)

将用户空间的一段内存区域映射到内核空间,

映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,

同样,内核空间对这段区域的修改也直接反映用户空间

通俗点理解嘛:就是你和镜子中的你,你发生什么改变,镜子里的你也发生同样的改变

现在假设镜子里的你可以被第三方改变(一定不是你),它被改变的同时,镜子外面的你也在被改变

好像穿越时空,历史的你被改变了,现在的你也就不复存在了

这样看来,双方改变是同时的

如果内核空间与用户空间两者之间需要大量数据传输,效率是很高的,因为它们同时在改变

具体步骤

用open系统调用打开文件, 并返回描述符fd.
用mmap建立内存映射, 并返回映射首地址指针start.
对映射(文件)进行各种操作, 显示(printf), 修改(sprintf).
用munmap(void *start, size_t lenght)关闭内存映射.
用close系统调用关闭文件fd.

mmap函数是unix/linux下的系统调用

mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。

普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问

既然进程可以直接访问普通文件,就不需要再调用read()/write()等函数.

需要注意:

mmap没有分配空间, 只是将文件映射到调用进程的地址空间里,但是会占用 virutal memory, 然后就能对文件操作但是你刚操作结束,内存中的内容并不会立即更新到文件中,而是有一段时间的延迟,你可以调用msync()来显式同步一下, 这样你所写的内容就能立即保存到文件里了, 但是通过mmap来写文件这种方式没办法增加文件的长度, 因为要映射的长度在调用mmap()的时候就决定了.如果想关闭内存映射,可以调用munmap()来关闭内存映射.

函数原型

接下来细说参数

 

 

 

 

C语言_mprotect 函数深度解析与应用实践 Linux mprotect 函数深度解析与应用实践 阅读详情

相关推荐

ArcGIS属性表汉字转拼音

接着我安装了一个编辑器“PyCharm Community Edition 2019.3.3\bin\pycharm64.exe”,在里面添加“pypinyin”包,然后将其设置为arcgis的编辑器和调试程序,还是失败;我在10.6的机器上折腾了上面几步,直到两周后脚本突然运行成功,我也不确定是哪一步导致pypinyin包配置成功,因此将心得体会写出来,如果过一段时间,打开10.2的机器运行脚本成功了,再写后续.......,按照“配置方法1:”进行尝试,显示配置失败。

2301_77413856的博客 1295

Linux下查看内存使用状况的命令:free -h

total:指一共有多少内存; used:正在被使用的内存; free:完全空闲中的内存; shared:共享内存(无实际用处?) buffer/cache:缓存缓冲内存; available:真实可用的内存; cache(内存中的高速缓存)的作用:提高cpu读取数据的速度;(访内存比访问外存花费时间少,划分部分内存作为缓存区,提高性能---高效率的读) buffer(内存中的缓冲区):为了提高写硬盘的速度;(高效率的写) 参考书籍:运维手册 ...

JoggingPig的博客 2377

QMT量化交易实战:如何用通达信预警数据自动买卖股票(附完整Python代码)

本文详细介绍了如何利用QMT平台对接通达信预警数据,构建自动化股票交易系统。通过完整的Python代码示例,展示了从数据获取到订单执行的全流程,帮助投资者实现量化交易策略的自动化执行,提升交易效率。

weixin_29234423的博客 210

mprotect

mprotect是一个在Linux操作系统中使用的函数,它允许用户修改一段指定内存区域的访问权限。

qq_42805085的博客 1080

【FLINK+Kerberos+kafka】在华为云上 bootstrap.server使用IP的GSS initiate failed 问题处理

目前互联网上所有的资料显示都是说没有正确设置KDC之类的,但本博主实际通过java代码低版本 如使用kafka-client 0.11.0 ,2.4.0等版本手动创建kafkaconfig 或者使用华为云的LoginUtils类 都能够正常链接,所以应该是高版本添加了相关配置,或者flink在subtask 创建kafkaAdminClient时 丢弃或使用了默认的一些配置行为,导致了客户端和kdc验证之间出现了principal 不一致导致验证失败。client.dns.lookup配置项作用。

honghanyue1791的博客 574

金融波动率的“捕手”:GARCH模型,揭秘市场波动的“聚集密码”

摘要: GARCH模型(广义自回归条件异方差)是金融时间序列分析中用于捕捉“波动聚类”现象的核心工具。传统模型(如ARIMA)无法刻画金融数据的时变波动特性,而GARCH通过建模条件方差的动态变化(如$\sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2$),精准预测波动率。Python实战显示,GARCH能有效拟合模拟金融数据的波动聚类,残差无自相关,验证了其优越性。该模型在波动率预测、风险价值(VaR)计算和期权定

u010257409的博客 2055

Linux中mprotect()函数的用法

mprotect()函数修改在内存映像上的保护模式。 函数原型: #include    #include    int mprotect(const void *start, size_t len, int prot); mprotect把自start开始的内存区的保护模式修改为prot指定的值,如果执行成功返回0,如果执行失败,mprotect返回-1,并且设置errno变量。

Roland_Sun的专栏 5万+

渗透测试自学日志之漏洞复现篇:漏洞列表

复现成功的漏洞列表,有复现方式,各位可以参考。 网络安全,人人有责,使用本文进行非法活动,与本人无关

maverickpig的博客 2175

linux srelf 加壳代码,浅谈被加壳ELF文件的DUMP修复

前面的文章中,我已经介绍了如何调试被加壳的ELF,这里不在叙述,直接进入正题,以某加固为例,如何DUMP和修复被加壳的ELF,使其能调试加载我们先来看看被加壳ELF的头和Program Header首先我要让调试器停在入口点0x3860的位置开始DUMP修复之旅,我的第一次DUMP修复的方法,延续了PE的思路,结果失败了失败的原因并不是思路不对,而是细节上出现问题第一次DUMP的方法:1.废除不影...

weixin_31232695的博客 797

Python全栈入门到实战【基础篇 05】核心基础:Python的2种运行模式(交互式+命令行式)

Python代码运行模式详解:交互式与命令行式对比 摘要: Python提供两种核心运行模式:交互式(REPL)和命令行式(脚本式)。交互式模式适合快速测试语法,即时反馈结果,通过终端输入python启动,特点是无需保存、临时执行,适合验证小段代码逻辑。命令行式模式需将代码保存为.py文件后运行,适合开发完整程序,可重复执行和修改。两种模式各有优势:交互式便于学习调试,命令行式适合实际开发。掌握两种模式的使用场景和切换方法,是Python入门的关键技能,能显著提升学习效率。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4559

AUTOSAR知识点 之 XCP (二):XCP基础概念

学习XCP的过程中,对XCP的基本概念要做一个全面的认知,因为里面有很多缩写以及难以理解的点,假设对此模模糊糊一知半解,那么对整个协议栈的认知会遇到极大的障碍。XCP的信号流传输图示如下XCP 标准主要分为 5 个部分:这部分提供了对于协议的一个概况介绍,包括 XCP 的功能和基础性内容。这部分内容对协议层进行了详细的规范和说明。

梦想技术家 2769

Ret2csu Jarvisoj level5_x64

1.checksec+运行 64位+NX保护 2.强大IDA进行中

Rt1Text的博客 375

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

linux函数没有返回值导致溢出,pwn的艺术浅谈(一):linux栈溢出

这个系列主要介绍linux pwn的基础知识,包括堆栈漏洞的一些利用方法。这篇文章是这个系列的第一篇文章。这里我们以jarvisoj上的一些pwn题为例来对linux下栈溢出利用和栈的基本知识做一个简单的介绍。题目地址:https://www.jarvisoj.com/challenges。0. Level0,栈的基本结构及nx绕过首先查看一下题目的保护措施(如下图所示),可以看到是一个只开启了N...

weixin_30621429的博客 558

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

浅谈被加壳ELF文件的DUMP修复

腾讯电脑管家 · 2015/06/10 15:45前面的文章中,我已经介绍了如何调试被加壳的ELF,这里不在叙述,直接进入正题,以某加固为例,如何DUMP和修复被加壳的ELF,使其能调试加载我们先来看看被加壳ELF的头和Program Header首先我要让调试器停在入口点0x3860的位置开始DUMP修复之旅,我的第一次DUMP修复的方法,延续了PE的思路,结果失败了失败的原因并不是思路不对,而...

weixin_33843409的博客 813

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mprotect函数测试

mprotect函数测试

1399

【CTF | pwn篇】mprotect()函数

本文介绍了Linux中mprotect()函数的使用方法,该函数用于修改指定内存区域的保护属性。文章详细说明了函数原型、参数选项(PROT_READ、PROT_WRITE等)及其组合使用方式,并强调了内存区间必须对齐页边界的要求。同时列出了函数可能返回的错误码及其具体原因(如EACCES、ENOMEM等),帮助开发者理解调用失败时的处理方式。最后提供了官方文档参考链接。

序章的博客 838

Linux C/C++内存越界定位: 利用mprotect使程序在crash在第一现场

对于大型Linux C/C++程序,内存越界和野指针类问题往往比较难定位。有的由于内存被非法改写造成了业务功能问题,有的则直接导致了程序crash,而且还经常不是第一现场。针对这种问题,可以采取的解决方法有: 利用valgrind工具来排查,会影响程序性能; 使用Address Sanitizer工具排查; 如果是固定的内存被破坏,可以利用gdb watch来抓取第一现场的调用栈; 可以利用G...

Life runs on code 1万+

静态编译:Mprotect、自动化rop链;Ret2csu

开启NX,64位,IDA分析:看左半边不难看出这是一道静态编译题(简单解释,左边函数很多,静态编译占内存一般比动态多的多右半边可以看到,只有一个gets函数可以利用(存在栈溢出由于这题是静态编译题,因此我们可以有多种写法,这里我们分别使用Mprotect与自动化rop链解题。

2301_79880752的博客 1644

mprotect()函数 Unix/Linux

mprotect - 控制允许访问的内存区域 内容简介 #include int mprotect(const void *addr, size_t len, int prot); 描述 The function mprotect() specifies the desired protection for the memory page(s) containing

hellochenlu的博客 3120

mmap & mprotect详解

mmap&mprotect 最近做了一道题, 竟然不让用system和execve, 让用mmap 和 mprotect来解决。可是身为小白萌新的我,对此一脸懵逼, 查阅相关内容和文档, 写下这篇博客, 用来回顾和分享。 mmap函数 头文件: <sys/mman.h> 函数原型: void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset); 作用: mmap将一个文件或者其它对象映

Y_peak的博客 1577

Linux内存mprotect读写,mprotect笔记

用户态mprotect的定义int mprotect(const void *addr, size_t len, int prot);其中:addr --- 起始地址len ----addr开始的一块内存的大小prot ---- 期望设置的内存属性,取值是PROT_READ, PROT_WRITE, PROT_EXEC, PROT_NONE 这些bit的组合SYSCALL_DEFINE3(...

weixin_39746382的博客 954

mprotect设置内存访问权限

一、源代码以及编译 vi protect.ci

程序改变生活 5665

mprotect: 设置内存访问权限 Linux GCC

mmap 的第三个参数指定对内存区域的保护,由标记读、写、执行权限的 PROT_READ、PROT_WRITE 和 PROT_EXEC 按位与操作获得,或者是限制没有访问权限的 PROT_NONE。mprotect 的参数分别为内存区间的地址,区间的大小,新的保护标志设置。有一种监控内存访问的高级技巧,可以通过利用 mmap 和 mprotect 保护目标内存区间,然后当程序访问时候接收并处理 Linux 系统发送的 SIGSEGV 信号。这个句柄将解除内存保护,因而程序内存访问得以继续。

liulilittle的博客 1308

mprotect,ret2libc

果然是进入了mprotect函数,再ni就ni不动了,因为我们还没有填入返回地址,接下来再将返回地址修改为bss,但是到这我们只是修改了bss的权限,以及返回到bss并没有获取权限的操作,那么接下来需要再使用。然后来讲讲mprotect函数的使用规则:mprotect(起始地址(要把后三位地址换成000),长度,0-7(取决于你想把目标地址权限改成什么样儿,一般改成7:可读可写可执行))看到gets函数,那么就存在栈溢出了,shift+f12看了一下也是没有后门函数什么的。

2301_79879963的博客 1025

linux c之使用mprotect检测内存访问

在Linux中,mprotect()函数可以用来修改一段指定内存区域的保护属性。 函数原型如下: #include   #include   int mprotect(const void *start, size_t len, int prot);  mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。 pr

云守护的专栏 1万+
上一篇: 攻防世界--进阶区--forgot
下一篇: pwn--wp
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值