スタックVMAが実行可能でなければならないのはなぜですか?

スタックVMAが実行可能でなければならないのはなぜですか?

私は現在読んでいますLinuxカーネルの開発著者:ロバートラブ。

「15プロセスアドレス空間」の章では、彼はプロセスのメモリマップを印刷します。

user@machine:~$ pmap 1424
#all the processes mapped memory (skipped for readability)
bfffe000 (8KB)        rwxp (0:00 0)         [ stack ]

最後の行はスタックを示しています(下に増加)。
彼は今こう言います。

スタックは自然に読み、書き込み、実行が可能です。そうでなければあまり役に立ちません。

私が知っている限り、私たちはスタックを使ってデータとコードアドレス(関数とそのパラメータ/変数)を保存します。

スタックが実行可能でなければならない理由がわかりません。

ベストアンサー1

この情報は古く、通常はスタックを実行できなくなります。

00007ffd884fa000    356K rw---   [ stack ]

GCCが構築される場合、実行可能なスタックが必要です。ネストされた関数呼び出しのためのトランポリン。これらのトランポリンは、実行時に生成されスタックに保存される小さなコードフラグメントです。したがって、使用する場合はスタックを実行できる必要があります。コンパイラはこの要件を追跡し、バイナリ(ライブラリと実行可能ファイル)にフラグを出力して、実行可能なスタックが必要かどうかを示します。以下を使用して、このフラグの値を表示および操作できます。execstack(8)

おすすめ記事