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

Indirect Calling of Nested Functions on GCC Without Executable Stack

GCCのネスト関数は通常、実行可能スタック上にトランポリンを生成して呼び出しを実現しますが、セキュリティ上の懸念があります。この記事では、トランポリンからコードアドレスと静的チェーンを抽出し、`__builtin_call_with_static_chain`を使って直接呼び出すことで、実行可能スタックを回避する手法を紹介します。また、トランポリンを関数ディスクリプタとして解釈する別のアイデアも提示します。

トランポリンを呼び出す代わりに、呼び出し側でトランポリンのコードを解釈していると言えるでしょう。

この日のほかの記事

2026-08-29