可能重复:
Retrieving the memory map of its own process in OS X 10.5/10.6在OS X上,您如何找出当前的内存保护级别?
在OS X,我可以使用mprotect()
来请求的存储器中的特定页面可以由可读,可写或可执行的一些组合。
我想知道如何找出当前的保护级别。作为一个例子,在Linux我可以cat /proc/$$/maps
找出相同的信息:
$ cat /proc/$$/maps
00400000-004db000 r-xp 00000000 fb:00 131145 /bin/bash
006da000-006db000 r--p 000da000 fb:00 131145 /bin/bash
006db000-006e4000 rw-p 000db000 fb:00 131145 /bin/bash
006e4000-006ea000 rw-p 00000000 00:00 0
00df4000-00e55000 rw-p 00000000 00:00 0 [heap]
...
在这里,我可以看到有5个范围的存储器映射的主可执行文件(bash
),一个读/执行,一个是只读的,其余的是读/写。
我已经浏览了所有可以在OS X上获得相同信息的手册页和官方API,并且到目前为止已经空了。我唯一发现的就是使用mincore()
来判断一个页面是否在内核中。但这还不够;我也想要当前的一组权限。
是否有任何无证的方法来做到这一点?
@diciu,感谢您的链接。是的,我相信这个问题是你所关联问题的一个子集。然而,(我很遗憾没有在这个问题中写这个)我的下一步就是尝试在iOS上使用这个工具 - 并且那里的答案不适用。看起来我需要在'/ usr/include/mach/mach_vm.h'中探索“Mach VM region APIs”,正如第二个最上面的答案所暗示的那样。不幸的是,提供的链接被打破,头文件并没有完全让API变得明显。 – mpontillo 2012-02-15 06:54:49
对于Mac OS X,已打开的源代码包含XNU,因此您应该能够找到要查找的内容(http://www.opensource.apple.com/source/xnu/xnu-1699.24.8/)。对于iOS而言,并非如此(http://www.opensource.apple.com/release/ios-50/) – diciu 2012-02-15 07:15:06
由于虚拟内存管理依赖于高度架构,因此可能无法在MacOS X和iOS上使用可移植的API。 – 2012-03-16 19:32:00