我正在讀上段故障維基百科來通過下面的代碼和語句。該程序的可執行文件標記爲只讀
int main(void)
{
char *s = "hello world";
*s = 'H';
}
當被編譯包含該代碼的程序,字符串「hello 世界」被放置在程序可執行文件的部分標記 爲只讀;加載時,操作系統將其他 字符串和常量數據放在只讀內存段中。當 執行,可變,S被設定爲指向串的位置,並 試圖通過可變的H字符寫入 存儲器,導致一個分段錯誤。編譯這樣的程序 用編譯器不檢查在編譯時只讀 位置的分配。
我的問題是文件權限,即當可執行文件標記爲只讀,以及讀寫時 等等?
我想知道所有有關文件permissions.Can我們明確地更改文件權限?
當它說的文件,這是否意味着堆在這裏? – noMAD 2012-04-26 03:18:36
正在運行的程序中的文件訪問權限和內存訪問權限不相關。將可執行程序標記爲可寫,不會導致其文本頁面被映射爲可讀/寫;相反,將其標記爲只讀不會導致其數據頁被意外映射爲只讀。 – geekosaur 2012-04-26 03:19:35
我不確定文件權限是如何相關的 - 維基文章指的是內存頁*的權限。可以按照系統特定的方式更改頁面權限,例如POSIX系統上的mprotect()。 – FatalError 2012-04-26 03:20:01