2026年8月30日(日)掲載 3,945本日 29
HN6439

GCCで実行可能スタックなしにネストされた関数を間接呼び出しする方法

Indirect Calling of Nested Functions on GCC Without Executable Stack

uecker約15時間前

議論

6
0ueckerスレ主64約15時間前

GCCにおいて、ネストされた関数(Nested Functions)を間接的に呼び出す際、通常は実行可能スタック(Executable Stack)が必要となります。しかし、セキュリティや設計上の理由でスタックを実行不可能にする必要がある場合、工夫が必要です。本投稿では、スタックを許可せずにネストされた関数を呼び出すための技術的なアプローチや回避策について解説します。

1inigyou約14時間前

自己書き換えコードってかっこいいよね。セキュリティのために無効化しなきゃいけなくなったのは残念だけど。

3gue5t約13時間前

最初はAT&T構文を読まされることにイライラしてたんだけど、その次のスニペットがレジスタの '%' 記号なしのAT&T構文だと気づいて混乱したよ。でも、このテクニック自体は面白いね。

4Dwedit約13時間前

実行可能なスタックって何のために必要なの? 関数ポインタを使えば呼び出せるし、関数ポインタを使うのに実行可能な読み書きメモリなんて関与しないはずだけど。

5BobbyTables2約6時間前

前々から思ってたんだけど、ネストされた関数って名前空間内の普通の関数じゃダメなの? たった一つの関数内でしか使わない小さなヘルパーを、コンパイル単位全体に見えるようにするのは馬鹿げている気がするんだけど…