有没有办法检查OS使用哪种内存保护machenizem?更改linux内存保护
我有一个程序,在一台计算机(Ubuntu的),但没有在另一个(RH6)的分段故障失败。
其中一个解释是操作系统使用的内存保护mechanizem。 有没有一种方法可以找到/更改它?
感谢,
有没有办法检查OS使用哪种内存保护machenizem?更改linux内存保护
我有一个程序,在一台计算机(Ubuntu的),但没有在另一个(RH6)的分段故障失败。
其中一个解释是操作系统使用的内存保护mechanizem。 有没有一种方法可以找到/更改它?
感谢,
您可能希望更多地了解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)。
是用c语言编写的程序吗?因为也许glibc可以这样做。 – DonCallisto
为什么不修复程序来停止尝试访问它不拥有的内存呢? – geoffspear
它用于修复它.. – dk7