Llamadas indirectas a funciones anidadas en GCC sin pila ejecutable
Indirect Calling of Nested Functions on GCC Without Executable Stack
Martin Uecker explica cómo evitar la pila ejecutable al usar funciones anidadas de GCC en versiones anteriores a GCC 17. Analiza el mecanismo de trampolines que GCC genera para capturar variables, y propone un truco: extraer la dirección del código y la cadena estática del trampolín para llamar directamente a la función con __builtin_call_with_static_chain, y luego limpiar la marca de pila ejecutable con patchelf. También sugiere tratar los trampolines como descriptores de función, interpretándolos en el punto de llamada. Todo está implementado en su biblioteca experimental noplate.
En lugar de invocar el trampolín, podríamos decir que estamos interpretando el código del trampolín en el lugar de la llamada usando un intérprete súper simple que solo puede interpretar esta secuencia de código específica y que es tan simple que se puede incluir en línea.