改变linux内存保护

时间:2012-06-20 14:16:40

标签: linux memory-management

有没有办法检查操作系统使用哪种内存保护machenizem?

我有一个程序在一台计算机(ubuntu)中没有出现分段错误,但在另一台计算机(RH6)中没有。

其中一个解释是操作系统使用的内存保护机制。 有没有办法可以找到/改变它?

谢谢,

1 个答案:

答案 0 :(得分: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)。