私はセグメンテーションフォルトでウィキペディアを読んでいました。読み取り専用とマークされたプログラム実行可能ファイル
int main(void)
{
char *s = "hello world";
*s = 'H';
}
このコードを含むプログラムをコンパイルすると、文字列は「ハロー 世界は、」プログラムの実行可能ファイルのセクションに配置され、読み取り専用として をマーク。ロードされると、オペレーティングシステムは、他の 文字列と定数データをメモリの読み取り専用セグメントに配置します。 が実行されると、変数sが文字列の場所を指すように設定され、 変数を介してメモリに にH文字を書き込もうとすると、セグメント化エラーが発生します。このようなプログラムを にコンパイルすると、コンパイル時に読み取り専用の の場所の割り当てがチェックされません。
私の質問はファイルのアクセス許可にあります。つまり、実行可能ファイルが読み取り専用で、読み書き時に などと書かれていますか?
私はファイルのアクセス許可についてすべて知りたいと思います。ファイルのアクセス許可を明示的に変更できますか?
ファイルと言うと、ここにスタックするのですか? – noMAD
実行中のプログラム内のファイルアクセス許可とメモリアクセス許可は関連していません。実行可能プログラムを書き込み可能としてマークしても、そのテキストページは読み書き可能にマッピングされません。反対に、それを読み取り専用にマークしても、データページが予期せずに読み取り専用になることはありません。 – geekosaur
ファイル権限がどのように関連しているのかよく分かりません.Wikiの記事ではメモリ*のページのパーミッションを参照しています。 POSIXシステムの 'mprotect() 'のように、システム特有の方法でページパーミッションを変更することができます。 – FatalError