2012-06-20 92 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)。