Martin Uecker detalla una técnica avanzada para gestionar funciones anidadas en compiladores GCC antiguos sin requerir una pila ejecutable, un problema común al usar callbacks. Aunque GCC 17 y Clang introducen macros específicas para este fin, los desarrolladores que deben soportar versiones previas enfrentan el riesgo de seguridad asociado a la ejecución de código en la pila. El artículo explica cómo GCC genera trampolines (trampolines) en la pila para capturar variables del contexto padre mediante registros de cadena estática y direcciones de código inmediatas.
La solución propuesta consiste en extraer manualmente estas dos piezas de información desde el trampoline generado por el compilador, utilizando macros como peek y array_slice de la librería experimental noplate. Al obtener la dirección del código y la cadena estática, es posible invocar la función local directamente mediante __builtin_call_with_static_chain, evitando así la ejecución real del trampoline. Este enfoque permite aplicar patchelf --clear-execstack al binario final, eliminando la marca de pila ejecutable y mitigando vulnerabilidades de seguridad críticas.
Aunque el método tiene limitaciones, como la creación inicial del trampoline y la imposibilidad de desvirtualizar la llamada indirecta por parte del compilador, ofrece una alternativa viable para entornos donde la seguridad de memoria es prioritaria. Uecker también explora una variante que interpreta el código del trampoline en el punto de llamada mediante un intérprete minimalista inlineable, optimizando aún más el rendimiento y la seguridad.
