linux 中的mem参数,Linux内核API memdup_user

memdup_user函数功能描述:memdup_user( )函数的功能是根据给定的一段地址空间(这里由void __user *src和size_t len决定),再分配一个内存空间,并将原地址空间中的内容拷贝到新分配的内存空间中,这里需要注意原地址空间是用户空间。

memdup_user文件包含

memdup_user函数定义

在内核源码中的位置:linux-3.19.3/mm/util.c

函数定义格式:

memdup_user输入参数说明

src:给定的地址空间的起始地址,它是一个用户空间的地址。

len:要拷贝的原地址空间的长度。

memdup_user返回参数说明

返回新分配的内存空间的起始地址。

memdup_user实例解析

编写测试文件:memdup_user.c

头文件及全局变量声明如下:

模块初始化函数:

模块退出函数:

模块初始化及退出函数调用:

实例运行结果及分析:

首先编译模块,执行命令insmod memdup_user.ko插入模块,然后执行命令dmesg -c,会出现如图所示的结果。

9d39cefb926257d7505d08d09024d026.png

结果分析:

在本测试程序中,取当前进程的地址空间作为本测试函数所需要的用户空间,参数src的取值为当前进程地址空间的起始地址,len的值设置为20。为了防止以字节为单位读取的内存中的内容不可读,这里以字为单位读取。由输出结果可知,当前进程地址空间的起始地址为:mm_start = 0x7ff4dab26000;新分配的内存的起始地址为addr = 0xffff8800a165c520;新分配的内存空间第一个字的内容为*addr = 0x10102464c457f,第二个字的内容为*(addr+1) = 0x0。然后循环输出新内存空间中前len字节的内容(以字为单位输出),这些内容是由用户空间拷贝过去的,由输出结果可知它们依次为:0x10102464c457f,0x0, 0x7075646d003e0003,0x5d726573755f,0xffff8800a165cce0。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值