有沒有辦法檢查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