私のプログラムは、実行中の特定の時点で、自身の/ proc/self/mapsを1行ずつ(ヒープを含むまで)読み込みます。プログラムのパスは "/ home/t4"です。ここに出力があります:/proc/self/maps出力のヒープまでのセグメント
00400000-00403000 r-xp 00000000 68:06 21629911 /home/t4
00602000-00603000 r--p 00002000 68:06 21629911 /home/t4
00603000-00604000 rw-p 00003000 68:06 21629911 /home/t4
00604000-00608000 rw-p 00000000 00:00 0
01905000-01926000 rw-p 00000000 00:00 0 [heap]
コード、定数、静的変数、ヒープ、しかし、ここには5つあります。最初のコードは明らかにコードでなければならず、最後はヒープです。おそらく第2のものは定数ですが、他の2つは何ですか?ありがとう!
ありがとう! mprotectを呼び出して、(すでにマップされている)初期化された静的変数セグメントを読み取り専用に設定できない理由はありますか?私はこれを行うときにsegfaultを取得しますが、初期化されていない静的変数とheapセグメントはsegfaultなしで読み取り専用にすることができます。 –
はそこにあるものに依存します。あなたのプログラムによって直ちに修正されるものがあれば、もちろんsegfaultがあります。たとえば、リンクで使用される.gotグローバルオフセットテーブル。 –