有没有办法检查操作系统使用了哪个内存保护机制?
我有一个程序因分段错误而失败,在一台计算机(ubuntu)中但在另一台计算机(RH6)中没有。
一种解释是操作系统使用的内存保护机制。有没有办法可以找到/更改它?
谢谢,
有没有办法检查操作系统使用了哪个内存保护机制?
我有一个程序因分段错误而失败,在一台计算机(ubuntu)中但在另一台计算机(RH6)中没有。
一种解释是操作系统使用的内存保护机制。有没有办法可以找到/更改它?
谢谢,
您可能想了解更多关于虚拟内存、系统调用、Linux 内核、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
(ie 4.7) 和gdb
(ie 7.4) 的最新版本。