有没有办法检查操作系统使用哪种内存保护machenizem?
我有一个程序在一台计算机(ubuntu)中没有出现分段错误,但在另一台计算机(RH6)中没有。
其中一个解释是操作系统使用的内存保护机制。 有没有办法可以找到/改变它?
谢谢,
答案 0 :(得分:1)
您可能想详细了解virtual memory,system calls,linux kernel,ASLR。
然后,您可以研究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)。