GCC-Trampoline-Hack: Verschachtelte Funktionen ohne ausführbaren Stack aufrufen

Indirect Calling of Nested Functions on GCC Without Executable Stack

Martin Uecker zeigt einen Hack, um verschachtelte Funktionen in älteren GCC-Versionen ohne ausführbaren Stack aufzurufen. Statt den Trampolin-Code auf dem Stack auszuführen, extrahiert er die Code-Adresse und die statische Kette aus dem Trampolin und ruft die Funktion direkt mit `__builtin_call_with_static_chain` auf. Dadurch kann der Stack mit `patchelf --clear-execstack` wieder als nicht ausführbar markiert werden. Zusätzlich schlägt er vor, Trampoline als Funktionsdeskriptoren zu interpretieren, um den Aufruf zu optimieren.

In gewissem Sinne könnte man sagen, dass wir statt das Trampolin aufzurufen, den Code des Trampolins an der Aufrufstelle mit einem super einfachen Interpreter interpretieren, der nur diese spezifische Codesequenz interpretieren kann und so einfach ist, dass er inline expandiert werden kann.

Mehr von diesem Tag

2026-08-29