Ich habe festgestellt, dass GCC, wenn wir nested functions verwenden, einen ausführbaren Stack für trampoline code benötigt. Folgender Code zeigt jedoch beim Kompilieren mit gcc keinen ausführbaren Stack an. (I verwenden execstack zu überprüfen, ob der Stapel ausführbar ist)Beispiel eines ausführbaren Stacks unter Linux (i386-Architektur)
#include <stdio.h>
#include <unistd.h>
int main()
{
int add(int a, int b)
{
return a + b;
}
return add(2, 3);
}
Warum funktioniert das nicht in einem ausführbaren Stack führen? Und wenn es nicht soll, kann dann jemand ein Beispiel für ein Code-Konstrukt geben, das einen ausführbaren Stack gibt?
Ich denke, lokal definierte Funktionen brauchen nicht ausführbaren Stack, weil ihr Code noch im selben Codeabschnitt wie andere Funktionen gespeichert ist, und nicht auf die Stapel. –