【发布时间】:2012-05-06 18:59:11
【问题描述】:
我正在阅读有关分段错误的维基百科,并通过以下代码和语句获得。
int main(void)
{
char *s = "hello world";
*s = 'H';
}
当包含这段代码的程序被编译时,字符串“hello world”被放置在程序可执行文件标记的部分 只读;加载时,操作系统将其与其他 只读内存段中的字符串和常量数据。什么时候 执行后,变量 s 被设置为指向字符串的位置,并且 尝试通过变量将 H 字符写入 内存,导致分段错误。编译这样的程序 使用不检查只读分配的编译器 编译时的位置。
我的问题是关于文件权限,即当可执行文件标记为只读以及何时读写 等等?
我想了解所有关于文件权限的信息。我们可以显式更改文件权限吗?
【问题讨论】:
-
当它说文件的时候,是不是意味着堆栈在这里?
-
正在运行的程序中的文件访问权限和内存访问权限不相关。将可执行程序标记为可写不会导致其文本页面被映射为读/写;相反,将其标记为只读不会导致其数据页意外地映射为只读。
-
我不确定文件权限的相关性——维基文章指的是内存页的权限。可以以特定于系统的方式更改页面权限,例如 POSIX 系统上的
mprotect()。 -
这里的文件是可执行文件。
标签: c segmentation-fault file-permissions