Der moderne Compiler GCC ist so mächtig, dass es sogar Pufferüberlauf in der Kompilierungsphase verhindern kann, so dass OS Code auf Stapelspeicher nicht ausführen kann.Die Art des Compilers bei Pufferüberlauf
Zum Beispiel:
void function(char *str)
{
char buffer[16];
strncpy(buffer, str, 256);
}
void main()
{
char large_string[256];
int i;
for(i = 0; i < 256; i++)
large_string[i] = 'A';
function(large_string);
}
Die einzige Art, wie ich die Magie 0x41414141 bekommen kann, ist GCC einstellen Parameter kompilieren so wie:
gcc -fno-stack-protector -z execstack stackoverflow.c -o stackoverflow
(Getestet habe ich es auf Ubuntu 10.04 x86 klar 32bits Box)
Gibt es eine Möglichkeit, den GCC-Stack-Umgehungsschutz zu umgehen?
Auf welche Einschränkung beziehen Sie sich, und warum möchten Sie umgehen, was auch immer es ist? –
Sie möchten den Stapel absichtlich beschädigen? Warum? Und dein Code hat einen Bug, übrigens. Sie haben vergessen, 'large_string' zu beenden. Das 'strcpy()' ist nicht auf nur 255 Bytes beschränkt. –
Ich denke, Sie wollen fragen, ob es möglich ist, den GCC-Stack-Schutz zu umgehen, wenn ja, sollten Sie die Frage bearbeiten, um das klarzustellen. – iabdalkader