在Linux中利用mmap模拟Windows的VirtualAlloc
来源:互联网 发布:奥运圣火 知乎 编辑:程序博客网 时间:2024/06/13 22:38
主要利用mmap中的匿名映射来实现。
VirtualAlloc的Linux实现如下:
// 预留内存(相当于Windows-VirtualAlloc的MEM_RESERVE)。
// 用mmap映射一块private、anonymous、non-accessible的内存。
// 下面表示从0x10000000开始,预留1GB的内存
void* result1 = mmap((void*)0x10000000, 0x40000000, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
// 占用内存(相当于Windows-VirtualAlloc的MEM_COMMIT)。
// 用mprotect来修改刚才预留的内存的权限。
// 下面表示,修改1MB内存的访问权限,使其可读可写。
int result2 = mprotect((void*)0x10000000, 0x100000, PROT_READ | PROT_WRITE);
// 取消占用(相当于Windows-VirtualFree的MEM_DECOMMIT)。
// 用mprotect来修改刚才预留的内存的权限。
// 下面表示,修改1MB内存的访问权限,使其不可访问,并且将这段内存清零。
int result3 = mprotect((void*)0x10000000, 0x100000, PROT_NONE);
memset((void*)0x10000000, 0, 0x100000);
// 释放内存(相当于Windows-VirtualFree的MEM_RELEASE)。
// 用munmap释放这段内存
// 下面表示,释放刚才预留的全部内存。
VirtualAlloc的Linux实现如下:
// 预留内存(相当于Windows-VirtualAlloc的MEM_RESERVE)。
// 用mmap映射一块private、anonymous、non-accessible的内存。
// 下面表示从0x10000000开始,预留1GB的内存
void* result1 = mmap((void*)0x10000000, 0x40000000, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
// 占用内存(相当于Windows-VirtualAlloc的MEM_COMMIT)。
// 用mprotect来修改刚才预留的内存的权限。
// 下面表示,修改1MB内存的访问权限,使其可读可写。
int result2 = mprotect((void*)0x10000000, 0x100000, PROT_READ | PROT_WRITE);
// 取消占用(相当于Windows-VirtualFree的MEM_DECOMMIT)。
// 用mprotect来修改刚才预留的内存的权限。
// 下面表示,修改1MB内存的访问权限,使其不可访问,并且将这段内存清零。
int result3 = mprotect((void*)0x10000000, 0x100000, PROT_NONE);
memset((void*)0x10000000, 0, 0x100000);
// 释放内存(相当于Windows-VirtualFree的MEM_RELEASE)。
// 用munmap释放这段内存
// 下面表示,释放刚才预留的全部内存。
int result4 = munmap((void*)0x10000000, 0x40000000);
参考:
VirtualAlloc on Linux
How to allocate a region of memories which similar VirtualAlloc?
- 在Linux中利用mmap模拟Windows的VirtualAlloc
- 在Windows中模拟Linux的软件——Cygwin
- linux 中mmap的用法
- linux 中mmap的用法
- linux 中mmap的用法
- linux中mmap函数的理解
- 在应用程序中使用虚拟内存(VirtualAlloc VirtualFree)
- 在linux中使用内存映射(mmap)操作文件的方法
- linux中mmap函数
- 在linux中使用内存映射(mmap)操作文件
- Windows下的mmap——Windows环境下模拟嵌入式Flash一法
- linux mmap的例子
- Linux mmap的使用
- Ret2libc 利用 VirtualAlloc
- 利用mmap /dev/mem 读写Linux内存
- 利用mmap /dev/mem 读写Linux内存
- 利用mmap /dev/mem 读写Linux内存
- 利用mmap /dev/mem 读写Linux内存
- 模拟Hibernate框架的小demo
- 某大型银行深化系统之一:平台技术
- Axis2(6):跨服务会话(Session)管理
- 黑马程序员--第十四天:集合框架
- 修改python默认的字符编码为utf-8
- 在Linux中利用mmap模拟Windows的VirtualAlloc
- onvif 客户端的发现
- Linux经典书籍推荐
- MyEclipse 控制台输入中文乱码问题
- AIX的磁盘与文件管理
- 设置进程最后退出
- Axis2(5):会话(Session)管理
- 类似QQ组菜单功能
- zbar乱码问题