2012-06-20 107 views
0

有没有办法检查OS使用哪种内存保护machenizem?更改linux内存保护

我有一个程序,在一台计算机(Ubuntu的),但没有在另一个(RH6)的分段故障失败。

其中一个解释是操作系统使用的内存保护mechanizem。 有没有一种方法可以找到/更改它?

感谢,

+0

是用c语言编写的程序吗?因为也许glibc可以这样做。 – DonCallisto

+4

为什么不修复程序来停止尝试访问它不拥有的内存呢? – geoffspear

+0

它用于修复它.. – dk7

回答

1

您可能希望更多地了解virtual memorysystem callslinux kernelASLR

然后你可以研究mmap & munmap系统调用的角色和用法(还有mprotect)。它们是用来检索内存的系统调用(例如,实现malloc & free),有时会使用像sbrk这样的过时系统调用(它越来越无用)。

您应该使用gdb调试器(其watch命令可能会有用)和valgrind实用程序。 strace也可能有用。

看看里面的/proc伪文件系统。尝试了解

cat /proc/self/maps 

告诉你(大约运行cat的过程)。看看/proc/$(pidof your-program)/maps

也考虑使用pmap实用程序。

如果是您自己的源代码,请始终使用所有警告和调试信息进行编译,例如gcc -Wall -Wextra -g并改进它,直到编译器不给出任何警告。使用最近版本的gcc(即4.7)和gdb(即7.4)。