Since Linux 4.0 only users with the CAP_SYS_ADMIN capability can get PFNs. In 4.0 and 4.1 opens by unprivileged fail with -EPERM. Starting from 4.2 the PFN field is zeroed if the user does not have CAP_SYS_ADMIN. Reason: information about PFNs helps in exploiting Rowhammer vulnerability.
If the page is not present but in swap, then the PFN contains an encoding of the swap file number and the page's offset into the swap. Unmapped pages return a null PFN. This allows determining precisely which pages are mapped (or in swap) and comparing mapped pages between processes.
Efficient users of this interface will use /proc/pid/maps to determine which areas of memory are actually mapped and llseek to skip over unmapped regions.
详情可查看博客.
pagemap文件为二进制文件,要查看其文件内容可以使用od命名:
od /proc/self/pagemap
mmap头文件 sys/mman.h
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);int munmap(void *start, size_t length);int msync ( void * addr , size_t len, int flags); //通过调用msync()实现磁盘上文件内容与共享内存区的内容一致
作用: mmap将一个文件或者其他对象映射进内存,当文件映射到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作 。
参数说明: start:映射区的开始地址 length:映射区的长度 prot:期望的内存保护标志 —-PROT_EXEC //页内容可以被执行 —-PROT_READ //页内容可以被读取 —-PROT_WRITE //页可以被写入 —-PROT_NONE //页不可访问 flags:指定映射对象的类型 —-MAP_FIXED 如果你指定的地址和已有的线性区重叠,那么就抛弃已有的线性区映射 —-MAP_SHARED 与其它所有映射这个对象的进程共享映射空间 —-MAP_PRIVATE 建立一个写入时拷贝的私有映射 。内存区域的写入不会影响到原文件 —-MAP_ANONYMOUS 匿名映射,映射区不与任何文件关联;和使用/dev/zero映射一致 fd:如果MAP_ANONYMOUS被设定,为了兼容问题,其值应为-1 offset:被映射对象内容的起点reference
- https://blog.csdn.NET/luckywang1103/article/details/50619251
推荐阅读
- Linux无法通过上翻获取history解决办法
- 分享iPhone新系统的新功能
- 英语写作常用短语
- 婴儿拉稀吃什么药好
- 抗衰保健常用姜
- 什么是个人征信系统?征信系统有哪些类别
- 支付宝的常用功能
- 常用聊天交友软件
- 人力资源管理|书评:《五位一体 房地产组织与人力资源管理全景图与趋势》
- 脑部神经怎么检查?